新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 全球主流8位MCU芯片詳細解剖No.1:飛思卡爾 MC9S08AC60

        全球主流8位MCU芯片詳細解剖No.1:飛思卡爾 MC9S08AC60

        作者: 時間:2016-11-29 來源:網絡 收藏

          后臺/模式選擇(BKGD/MS)

          在復位時,BKGD/MS 引腳充當模式選擇引腳。復位完成后,該引腳立即作為后臺引腳,可以用于后臺調試通信。當作為后臺/模式模式選擇引腳時, 該引腳包括一個內部上拉器件,有輸入滯后,且無輸出斜率控制。當引腳作為后臺引腳時,它包括一個高電流輸出驅動。當該引腳作為模式選擇引腳時,它只有輸入,因此不包含標準的輸出驅動。

          ADC 參考引腳(VREFH, VREFL)

          VREFH和VREFL 引腳分別為ADC模塊的電壓參考高輸入和電壓參考低輸入。

          外部中斷引腳 (IRQ)

          IRQ 引腳是IRQ中斷的輸入源,也是BIH 和BIL指令的輸入。如果未使能IR功能,這個引腳仍配置為TPMCLK 。

          通用I/O和外設端口

          剩余的引腳被通用I/O和片上外設功能,如定時器和串行I/O系統共用。復位后,所有這些引腳立即配置為高阻抗通用輸入,且內部上拉器件關閉。

          重要模塊分析

          存儲器

          MC9S08AC60系列MCU中的片上存儲器包括RAM、非易失性數據存儲的Flash存儲器、I/O 和控制/ 狀態寄存器。這些寄存器可分為以下三類:

          • 直接頁面寄存器

          • 高位頁面寄存器

          • 非易失性寄存器

          復位、中斷和系統配置

          復位和中斷特性包括:

          • 多源復位,實現靈活的系統配置和可靠操作

          • 加電檢測(POR)

          • 低壓檢測(LVD),使能

          • 外部RESET 引腳

          • COP 看門狗使能,及兩個超時選擇

          • 非法操作代碼

          • 來自后臺調試主機的串行命令

          • 復位狀態寄存器(SRS) ,指示最新復位的源

          • 每個模塊的單獨中斷向量 (減少輪詢開銷)

          并行輸入 / 輸出

          通過端口數據寄存器讀/ 寫并行I/O。輸入輸出方向由端口數據方向寄存器控制。下面的結構圖舉例了一個引腳的并行I/O端口功能。

          中央處理單元 (S08CPUV2)

          HCS08 CPU具有以下特性:

          • 目標代碼完全兼容M68HC05和M68HC08家族

          • 所有寄存器和存儲器映射到一個獨立的64 KB的地址空間

          • 16位堆棧指針 (64 K字節地址空間內任意大小、任意地址的堆棧)

          • 16位變址寄存器 (H:X)支持強大的索引地址模式

          • 8位累加器 (A)

          • 許多指令把X作為第二個通用8位寄存器

          • 7種尋址模式:

          • 固有尋址模式 — 操作數存于內部寄存器

          • 相對尋址模式 —8位有符號偏移量的分支地址

          • 立即尋址模式 — 操作數位于下一個目標代碼

          • 直接尋址模式 — 操作數位于0x0000到0x00FF之間

          • 擴展尋址模式 — 操作數位于64K字節地址空間內

          • H:X相對變址尋址模式 — 提供包括自動增量在內的5種子模式

          • SP相對變址尋址模式 — 大大提高C語言編譯的效率

          • 提供四種尋址模式組合的寄存器-寄存器數據轉移指令

          • 溢出、半進位、負、零和進位狀況碼支持根據帶符號、無符號、BCD碼操作的結果進行條件轉移

          • 高效率的位操作指令

          • 快速8位乘8位和16位除8位指令

          • STOP和WAIT指令調用低功耗運行模式

          模數轉換器(S08ADC10V1)

          10位模數轉換器 (ADC)是新一代的逼近模數轉換器,在集成的微處理器片上系統中運行。 這種ADC模塊設計支持最高28個獨立的模擬輸入 (AD0-AD27)。MC9S08AC60系列微處理器上只使用了其中18個(AD0-AD15、AD26和AD27)輸入。這些輸入通過ADCH位選擇。

          ADC模塊特點包括:

          • 線性逐次逼近算法,10位精度。

          • 多達28個模擬輸入。

          • 8位或10位右對齊格式輸出

          • 單個或連續的轉換 (單個轉換后自動返回到空閑)

          • 設置采樣時間和轉換速度 (功率)

          • 轉換完成標志和中斷

          • 輸入時鐘可以選擇高達四個時鐘源

          • 在等待或stop3模式中操作為低噪音操作

          • 異步時鐘源的低噪音操作

          • 可選的異步硬件轉換觸發

          • 自動比較小于,大于或等于編程值

          • 溫度傳感器

          時鐘顯示程序

          使用MC9S08AC的Timer做一個時鐘,并在LCD1602上顯示

          lcd1602.h

          #ifndef _NICROSYSTEM_FREESCALE_S08_DEVKIT_LCD1602_H_

          #define _NICROSYSTEM_FREESCALE_S08_DEVKIT_LCD1602_H_

          unsigned char lcd_status(void);

          void lcd_init(void);

          void lcd_write_char(unsigned char x,unsigned char y, unsigned char ch);

          void lcd_write_str(unsigned char x,unsigned char y,unsigned char *s);

          void lcd_write_data(unsigned char data);

          void lcd_write_cmd(unsigned char cmd);

          #endif

          lcd1602.c

          #include "lcd1602.h"

          #include "derivative.h"

          #define LCD_DATA PTED

          #define LCD_DATA_DIR PTEDD

          #define LCD_DATA_DS PTEDS

          #define LCDRS PTAD_PTAD0

          #define LCDRW PTAD_PTAD1

          #define LCDE PTBD_PTBD0

          #define LCDRS_DIR PTADD_PTADD0

          #define LCDRW_DIR PTADD_PTADD1

          #define LCDE_DIR PTBDD_PTBDD0

          #define LCDE_DS PTBDS_PTBDS0

          #define LCDRS_DS PTADS_PTADS0

          #define LCDRW_DS PTADS_PTADS1

          void lcd_clear(void);

          void lcd_write_cmd(unsigned char cmd);

          void init_lcd() {

          LCD_DATA_DIR=0xff;

          LCDRS_DIR=1;

          LCDRW_DIR=1;

          LCDE_DIR=1;

          LCDRS_DS=1;

          LCDRW_DS=1;

          LCDE_DS=1;

          LCD_DATA_DS=0xff;

          LCD_DATA=0;

          LCDE=1;

          asm("nop");

          asm("nop");

          asm("nop");

          asm("nop");

          asm("nop");

          asm("nop");

          lcd_clear();

          lcd_write_cmd(0x38);//設置lcd功能:8位總線,雙行顯示,5X7點陣字符

          lcd_write_cmd(0x0f);//顯示開關控制:顯示ON,光標ON,閃爍ON

          lcd_write_cmd(0x06);//光標輸入方式增量移位

          lcd_write_cmd(0x80);

          }

          unsigned char lcd_status() {

          byte lcdstatus;

          LCD_DATA_DIR=0x00;

          LCDRS=0;

          LCDRW=1;

          LCDE=0;

          asm("nop");

          asm("nop");

          asm("nop");

          asm("nop");

          LCDE=1;

          lcdstatus=LCD_DATA;

          LCD_DATA_DIR=0xff;

          return lcdstatus;

          }

          void lcd_write_cmd(unsigned char cmd) {

          byte status;

          LCD_DATA=cmd;

          LCDRS=0;

          LCDRW=0;

          LCDE=0;

          asm("nop");

          asm("nop");

          asm("nop");

          asm("nop");

          do{

          status=lcd_status();

          }

          while(status&0x80);

          LCDE=1;

          }

          void lcd_clear(void) {

          lcd_write_cmd(0x01);

          }

          void lcd_write_data(unsigned char data) {

          byte status;

          LCD_DATA=data;

          LCDRS=1;

          LCDRW=0;

          LCDE=0;

          asm("nop");

          asm("nop");

          asm("nop");

          asm("nop");

          do{

          status=lcd_status();

          }

          while(status&0x80);

          LCDE=1;

          }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 工布江达县| 南郑县| 清远市| 商南县| 寿宁县| 黔江区| 潼关县| 扬中市| 彰化市| 布尔津县| 北安市| 新野县| 上虞市| 陆河县| 洪湖市| 浏阳市| 阿鲁科尔沁旗| 大邑县| 巩义市| 湖口县| 安溪县| 疏勒县| 织金县| 蕉岭县| 军事| 石城县| 孟村| 盱眙县| 丽水市| 平果县| 同德县| 宁乡县| 车致| 印江| 博湖县| 江源县| 古蔺县| 石城县| 桐柏县| 临沂市| 梁山县|