#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12xdp512" void MCUInit(void)//芯片初始化(了解更多请阅读S12在线开发相关章节介绍) { asm sei //asm CLR $0011 REFDV=0x01; // initiate PLL clock SYNR =0x02; // system clock 24M while (!(CRGFLG & 0x08)){} //CRGFLG的D3=1则稳定,并且可做为系统时钟 CLKSEL=0x80; // 选定所相环时钟 //FCLKDIV=0x49; //使FLASH 和 EEPROM // 的擦除操作工作频率在200HZ左右 //ECLKDIV=0x49; //PPAGE=0x20; asm cli } void put_char (char c) {//发送数据是通过判断状态寄存器SCI0SR1的第7位(TDRE) //接收数据是通过判断状态寄存器SCI0SR1的第5位(RDRF) //while((SCI0SR1 & 0X80)==0);//SCI0SR1的loops置0,正常模式,即当SCI0SR1.7=0时,等待 SCI0DRL=c;// SCI0SR1.7=1时,发送数据将c一字节输入数据缓冲区SCI0DRL(先低后 //高) } void main(void) { unsigned char x; unsigned int i,j; SCI0BD=0x009C; // SCI0BDL=0x9c; SCI0CR2=0x2c;//接收中断允许 PWME=0X00; //禁止PWM输出 PWMCTL=0X00; //通道不级联 PWMPRCLK=0X66; //ClockA=ClockB=Bus/64=125 kHz PWMCLK=0X00; //时钟来源选择ClockSA、ClockSB PWMSCLA=0X7D; //PWMSCLA:PWMSCLB =125 PWMSCLB=0X7D; //ClockSA:ClockSB=500 Hz x=0x00; PWMPOL=0XFF; //PWM输出起始为高电平 PWMCAE=0X00; //左对齐方式 PWMPER0=0X13; //输出周期=(1/500 Hz) ×(19+1)=40 ms DDRH=0xff; PTH=0x02; DDRB=0xff; //启动PWM输出 for(;;) { PWMDTY0=x; //占空比=[(PWMDTYx+1)/(PWMPERx+1)] ×100%=50% //些处的占空比可以修改,占空比越大,灯就越暗 // PTH_PTH0=0; //PTH_PTH2=0; // PTH_PTH3=0; // PTH_PTH4=0; // PTH_PTH1=1; if(x==0x13){ x=0x00; }else{ x++; } PWME=0X01; // put_char(x); PORTB=x; for(i=0;i<2000;i++){ for(j=0;j<500;j++){ } } } }