MC9S12XS128学习中文精华版.doc

上传人:scccc 文档编号:13983709 上传时间:2022-01-29 格式:DOC 页数:10 大小:38KB
返回 下载 相关 举报
MC9S12XS128学习中文精华版.doc_第1页
第1页 / 共10页
MC9S12XS128学习中文精华版.doc_第2页
第2页 / 共10页
MC9S12XS128学习中文精华版.doc_第3页
第3页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《MC9S12XS128学习中文精华版.doc》由会员分享,可在线阅读,更多相关《MC9S12XS128学习中文精华版.doc(10页珍藏版)》请在三一文库上搜索。

1、IO 口模块程序示例Void PORTB_Init(void)DDRB=0xff;/PB 口作输出使用, 1为输出, 0为输入PORTB=0x00;/PB 口数据寄存器值 注意:IO 口要注意以下几点:(1)每个IO 口的数据寄存器名可能不同( 2) AN 口只能作输入用(3) PH, PJ (高两位,低两位),PP可用输入中断功能使用( 4) IO 口作输入与输出时有不同的寄存器对应(5)10 口作复用时不能作10 口用,相反也不行10 口可用作:调试接口(接数码管、液晶、拨码开关等等)所以必须掌握使用拨码开关 要注意这样用 ;DDRB=0XFF;/ 输出P0RTB=0XFF;DDRB=0X

2、00;/ 输入AD 模块程序示例Void ATD_Init(void)ATD0CTL1 = 0x00;/8 位精度,不放电ATD0CTL2 = 0x42;/ 快速清除标志位,禁止外部触发,使能中断ATD0CTL3=0x8a;右对齐,每序列4次转换,不用FIFQ 进入FreezeMode 完成当前转换ATD0CTL4 = 0x03;/ 采样用 4 个 ATD周期,F (ATD) =1MHzbus clock为 8MHzATD0CTL5 = 0x29;/SCAN 模式,单通道,通道 9ATD0DIEN = 0x00;/ 禁止数据输入 Void main(void)ATD_Init(); #prag

3、maCODE_SEG NON_BANKED void interrupt 22 Int_AD0(void) DisableInterrupts;AD_wData = ATD0DR0L;读ATD转换的寄存器值(低八位)ATD0STAT0_SCF=0;/ (当AFFC为1时,写0清零;为1时写1清零)En ableI nterrupts;注意:ATD模块要着重注意:( 1)标志位清零(比较复杂)( 转换后的储存顺序( 3)精度的选择和转换速度(4)单个通道与多通道转换的区别定时器模块程序示例Void Timer_Init(void)TSCR1=0X90;/ 使能定时器并设置为自动清除标志 TFLG

4、1TSCR2=0X03;/ 设置分频系数为 8,及 232)多通道 TIE=0X01;/ 定时器通道 0 中断使能TIOS_IOS0=1;/PT0 口为输出比较TC0=TCNT+1677;/ 设定初值 / 定的时间就是从 0 加到 1677要的时间 EnableInterrupts;Void main(void)Timer_Init();.#pragmaCODE_SEGNON_BANKEDvoid interrupt 8 Timer(void) DisableInterrupts;TC0=TCNT+1677;/ 设定比较器下次中断时间TSCR1=0x00;/ 关定时器(一般情况定没必要用这个)

5、En ablel nterrupts;注意:定时器模块要关重注意以下几点:( 1)初值的设定,每次中断都要置初值( 2)标志位的清零方式(3) PT 口作为输入捕捉时的设置区别脉冲累加模块示例Void PT7_lnit(void)PACTL=0X40;/ 脉冲累加系统使能,下降没触发,使用预分频因子定义的时钟 PACNT=0X00;/ 设定脉冲累加计数寄存器初值 注意: 脉冲累加模块注意以下几点:(1)PACTL中的各位配合使用表,可以在自备次料上查PWM 脉宽调制模块示例Void PWM_Init(void)PWME=0X02;II 使能 PWM1 口,及 PP1 口PWMCTL=0X10;

6、II级连PPO禾口 PP1PWMPRCLK=0X07;II预分频A系数为128PWMCLK_PCLK1=0;II 级连通道 01 选择时钟 APWMPOL=0X02;II 级连通道 01 极性们为先高电平输出PWMCAE=0X00;II 级连通道 01 为左边对齐输出PWMDTY01=1000;II 占空比寄存器值PWMPER01=1500;II 周期寄存器值 注意:PWM 模块要注意以下几点:(1)PWM 级联时寄存器名称区别(2)预分频与分频的联合应用串行口 SCI程序示例Void SCI_Init(void)SCI0BDL=(byte)(8000/9600/16);没置总线为 8M 时

7、SCI波特率为 9600HzSCI0CR1=0x00;/ 数据格式为 8 位(没有奇偶校验位)SCI0CR2=0x2c;/ 接收中断使能,发送使能,接收器使能 Void main(void)SCI_Init();#pragma CODE_SEG NON_BANKEDinterrupt 20 void SCI_RX_IRS(void)byte RxData,RX;DisableInterrupts;RX=SCI0SR1;/ 读状态寄存器,为清零作准备RxData=(byte)SCI0DRL; 读/ 接收寄存器的值En ableI nterrupts;注意:串行口 SCI要注意以下几点:(1)波特

8、率的设置注意总线频率是否有变(2) SCI数据格式( 2)接收中断标志清零是先读状态寄存器再读数据寄存器( 4)发送时不能用中断,只能轮询标志位(易错)!琐相环模块程序示例Void SetBusCLK_32M(void)CLKSEL=0x00;/ 不使用锁相环PLLCTL_PLLON=1;/ 锁相环电路允许SYNR=0xc0|0x03;/SYNDIV=3REFDV=0xc0|0x01;/REFDIV=1POSTDIV=0x00;/ 分频系数为 20=1_asm(nop);/ 等待锁相环稳定_asm(nop);_asm(nop);_asm(nop);_asm(nop);_asm(nop);_as

9、m(nop);while(!(CRGFLG_LOCK=1);CLKSEL_PLLSEL=1;/ 使用锁相环(只能写最后) 注意:锁相环要注意以下几点( 1)锁相环使用后改变了总线频率,所以相它与总线频率相关的各模块寄 存器也要相应改变,以免出现低级错误(易错)!( 2)锁相环设置顺序( 3)超率不能超出范围(4)公式中的FOSC为晶振频率而非时钟频率,别搞错了!SPI通信模块程序示例void SPI_Init(void)/SPI 初始化SPI0CR1=0xde;/SPI中断使能,SPI系统使能,SPI为主机模式,SPI时钟极性为低时钟有 效,SPI传送期间从机SS脚可保持低电平SPI0CR2=

10、0xl2羊/模式错误使能,等待模式下停止SPI时钟SPI0BR=0x07;/ 分频系数为 256SPI0SR_SPIF=0;/ 接收中断标志初始化为 0void Send_Data(unsigned char data)/SPI 发送数据while(!SPI0SR_SPTEF);/ 等待发送寄存器为空SPI0DRL=data;while(!(SPI0SR_SPIF);/ 等待接收标志置 1,接收到的是返回值aa=SPI0DRL;unsigned char Read_Data()/SPI 读数据unsigned char data;while(!SPI0SR_SPTEF);/等待发送寄存器空(因

11、为SPI中收、发都用一个寄存器)SPI0DRL=0xff;while(!SPI0SR_SPIF);/ 等待接收标志置位data=SPI0DRL;/ 读出数据return data;/ 返回数据 注意:SPI要注意以下几点:(1)HCS12中SPI数据寄存器虽然有十六位,但有用的只有八位(用到的)PC9S12XS128MA中断向量表#define VectorNumber_Vporth25PORTH中断号#define VectorNumber_Vportj24PORT冲断号#define VectorNumber_Vatd022A/D 转换中断号#define VectorNumber_Vsci121串行口 1 中断号#define VectorNumber_Vsci020 串行口 0 中断号#define VectorNumber_Vtimch08 定时器中断

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1