全球主流8位MCU芯片详细解剖No.1:飞思卡尔 MC9S08AC60
• 扩展寻址模式 — 操作数位于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();
}
MC9S08AC60 8位MCU 飞思卡尔 MCU 相关文章:
- 如何使创新的MCU实现高效节能电机控制?(07-07)
- 全球主流8位MCU芯片详细解剖No.2:英飞凌 XC866(07-26)
- 全球主流8位MCU芯片详细解剖No.3:微芯 PIC16F877(08-03)
- 开发工程师的创意变戏法:8位MCU变身32位MCU?!(04-30)
- 8位MCU(微控制器)体系架构特征及设计原则(11-03)
- 替代8位MCU,Cortex-M3成最强杀手锏?(07-09)