微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 全球主流8位MCU芯片详细解剖No.1:飞思卡尔 MC9S08AC60

全球主流8位MCU芯片详细解剖No.1:飞思卡尔 MC9S08AC60

时间:07-22 来源:电子发烧友 点击:

• 扩展寻址模式 — 操作数位于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();

  }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top