日本精品久久-日本精品二区-日本精品二区-日本极品少妇-成人欧美一区二区三区黑人免费-成人欧美一区二区三区黑人免费

全球主流8位MCU芯片詳細解剖:MC9S08AC60

來源:網絡

點擊:837

A+ A-

所屬頻道:新聞中心

關鍵詞: MC9S08AC60,8位MCU,飛思卡爾,MCU

       相信很多人在學習MCU(單片機)的時候,都是從最基本的8位MCU開始的。如今,盡管32位MCU甚至更多功能強大的MCU大有下探取代之勢,但是在許多工程師的記憶里以及相當一部分應用領域,8位單片機依然是不可磨滅的一代經典!本文將結合單片機的生產廠商,帶你深入了解主流8位單片機的功能結構,引腳說明,模塊分析以及具體應用等等。

      飛思卡爾 MC9S08AC60

      簡介

      MC9S08AC60系列MCU是低成本、高性能HCS08系列8位微處理器單元  (MCU)的成員。這個系列的單片機均由一對引腳兼容的8位和32位器件組成,是Flexis系列器件的第3個系列產品。Flexis系列控制器是飛思卡爾控制器聯合體的連接點,使8位與32位兼容性成為現實。

      模塊結構圖

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

      系統時鐘圖

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

      引腳圖

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

      通用引腳連接

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

      重要引腳說明

      電源(VDD, VSS, VDDAD, VSSAD)

      VDD 和VSS 是MCU的主電源引腳。該電壓源為所有I/O 緩沖電路以及內部穩壓器供電。內部穩壓器向CPU  和MCU的其它內部電路提供穩壓后的低電壓源。

      VDDAD 和VSSAD 是MCU的模擬電源引腳。該電源為ADC 模塊供電。必須在離該模擬電源引腳盡可能近的地方連接一個0.1 μF  陶瓷旁路電容,來抑制高頻噪音。

      振蕩器(XTAL, EXTAL)

      復位后,MCU使用內部生成的時鐘(自時鐘模式— fSelf_reset),相當于8 MHz  晶體振蕩頻率。這個頻率的時鐘源在復位啟動時使用,可以作為停止恢復的時鐘源,這樣可以避免較長的晶體啟動延遲。該MCU還包含一個可修整的內部時鐘發生器(ICG)  模塊,可以用它來運行MCU。

      RESET 引腳

      RESET  是一個專用的引腳,內置一個上拉器件。它有輸入滯后,包含一個高電流輸出驅動,無輸出斜率控制。內部加電復位和低壓復壓電路一般都不需要外部復位電路。  這個引腳通常連接到標準的6引腳后臺調試連接器,這樣開發系統可以直接復位MCU系統。

      后臺/模式選擇(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端口功能。

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

      中央處理單元 (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;

      }

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

      if(y)

      lcd_write_cmd(0xc0+x);

      else

      lcd_write_cmd(0x80+x);

      lcd_write_data(ch);

      }

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

      if(y)

      lcd_write_cmd(0xc0+x);

      else

      lcd_write_cmd(0x80+x);

      while(*s){

      lcd_write_data(*s);

      s++;

      }

      }

      main.c

      #include /* for EnableInterrupts macro */

      #include “derivative.h” /* include peripheral declarations */

      #include “mc9s08ac16.h”

      #include “lcd1602.h”

      const unsigned char  table[10]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’};

      unsigned char hour=11,minute=20,second=0;

      unsigned char con_result[9];

      void init_system_clk(void)

      {

      ICGC1=0xf8;

      ICGC2=0x89;

      while(ICGS1_LOCK==0);

      }

      void convert() /*covert numeric data to char data,for instance,1 to ‘1’  */

      {

      unsigned char tens,unit;

      tens=second/10;

      unit=second%10;

      con_result[7]=table[unit];

      con_result[6]=table[tens];

      tens=minute/10;

      unit=minute%10;

      con_result[4]=table[unit];

      con_result[3]=table[tens];

      tens=hour/10;

      unit=hour%10;

      con_result[1]=table[unit];

      con_result[0]=table[tens];

      con_result[8]=‘\0’;

      con_result[2]=‘:’;

      con_result[5]=‘:’;

      }

      interrupt VectorNumber_Vtpm1ovf void TMP1_OVF_ISR(void)

      {

      DisableInterrupts;

      TPM1SC_TOF=0;

      second++;

      if(second》59)

      {

      minute++;

      second=0;

      }

      if(minute》59)

      {

      hour++;

      minute=0;

      }

      if(hour》23)

      {

      hour=0;

      }

      convert();

      lcd_write_str(4,1,con_result);

      lcd_write_cmd(0x0c);

      EnableInterrupts;

      }

      void main(void)

      {

      EnableInterrupts; /* enable interrupts */

      /* include your code here */

      SOPT_COPE=0;

      init_system_clk();

      init_lcd();

      lcd_write_str(2,0,“NicroSystem”);

      TPM1SC=0x4e;

      TPM1MODH=0xf4;

      TPM1MODL=0x24;

      for(;;) {

      //__RESET_WATCHDOG(); /* feeds the dog */

      } /* loop forever */

      /* please make sure that you never leave main */

      }

      典型應用

      室內空調系統

      現代空調系統使用越來越多的半導體來支持一系列高級功能,包括節能電機、交互式用戶界面和遙控器等。飛思卡爾可提供滿足這些領域特定需求的相應解決方案,  例如,能夠提高能效并降低工作噪聲的高級電機控制解決方案,針對用戶界面的一系列控制解決方案,以及針對遙控的基于紅外線和射頻的解決方案。

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

      無刷直流電機(BLDC)

      無刷直流(BLDC)電機在風扇、泵、HVAC風機與壓縮機、計算機磁盤驅動器與外設、家用電器、機器人、伺服系統、牽引控制、縫紉機和跑步機等應用中廣  泛使用。BLDC電機是一種旋轉電動機械,其定子為類似感應電機的傳統三相定子,轉子使用永磁體。電機扭矩和速度可由微控制器(MCU)或數字信號控制器  (DSC)實現極高效控制。飛思卡爾支持霍爾傳感器(換向)和無傳感器控制功能。

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

      汽車暖通空調(HVAC)

      暖通空調(HVAC)系統利用各種傳感器輸入的數據,控制不同類型的電機,如用于擺葉的步進電機和直流/無刷直流風扇電機。

      經典盤點——8位主流單片機學習詳解NO.1:飛思卡爾 MC9S08AC60

    (審核編輯: 智匯張瑜)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 纵横四海 电影| 掐脖子自制短视频| 诗经中使用叠词的诗句| 2024年怀男怀女表图| 金马电影网| 演员王磊| 美女网站视频免费| 《感恩的心》儿童朗诵| 网上视频| 谈判专家豆瓣| 伟大的转折| 尹丽川| 电影英雄| 大悲咒朗诵正版念诵| stevenson| 我爱发明鬼畜视频| 木偶人| 血色玫瑰电影完整版| 龙的心电影完整版国语| 禁忌爱情| 眼泪工匠| 魔影| 夫妻性生活视屏| 智乐星中考| 蓝盾保险箱电影| 侠侣探案| bb88| 国产电影网站| 欧比旺·克诺比| 流萤美图| 坑区| 爱在西元前简谱| 美国电影waseas| 根深蒂固韩国电影| 潜龙轰天 电影| 林丹出轨视频| 我爱我爹全集高清版免费观看| 陈学冬颖儿主演电视剧《解密》| 欧布奥特曼普通版普通话中文版| 性裸体视频| 布谷鸟 电影|