#include <hidef.h> /* common defines and macros */
#include <mc9s12a64.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12a64"
Byte DATANUM[23],i;
Byte controlword,timer;
Byte sci_control,realcontrol,number;
Byte A,B,C,AM,BM,CM;
void LoadData(void){
Byte id,kd;
DATANUM[0]=0xff;
for(id=1;id<22;id=id+1){
DATANUM[id]=id;
};
DATANUM[17]=AM;
DATANUM[18]=BM;
DATANUM[21]=CM;
DATANUM[22]=0;
for(kd=0;kd<22;kd=kd+1){
DATANUM[22]=DATANUM[22]+DATANUM[kd];
}
}
void main(void) {
REFDV=1; /*REF FREQUENCY IS 4/(REFDV+1) MHZ*/
SYNR=0; /*SYSCLK FREQUENCY IS (SYNR+1)*REF MHZ, 16MHz*/
//PLLPC=0x67; /*PLL LOCK INT ENABLE,PLL ON,AUTO MODE,limp mode enable,pseudo-stop enable*/
PLLCTL=0xE4; /*clock monitor, PLL is turned on, auto mode*/
CRGINT=0x80; /*ENABLE RTI INT*/
CLKSEL=0x40; /*system clock come from oscclock bus=osclock/2, all clock go on running in wait mode*/
RTICTL=0x41; /*PRESCALE(1000001=2*2**13 1.024MS FREQUENCY SENSITIVE)*/
COPCTL=0; /*disable COP*/
SCI1BDL=0x0D; //baud 38400
SCI1CR1=0x00; //奇偶,11位
SCI1CR2=0x2C; //准许接收发送,禁止mcu发送中断
i=0;
A=5;
B=5;
C=5;
AM=5;
BM=5;
CM=5;
realcontrol=0xFD;
EnableInterrupts;
for(;;) {
if(realcontrol!=0xFD){
if(controlword==1){
controlword=0;
switch(realcontrol)
{
case 0x74: AM=A;realcontrol=0xFC;break;
case 0x70: AM=AM+1;realcontrol=0xFC;break;
case 0x71: AM=AM-1;realcontrol=0xFC;break;
case 0x75: BM=B;realcontrol=0xFC;break;
case 0x72: BM=BM+1;realcontrol=0xFC;break;
case 0x73: BM=BM-1;realcontrol=0xFC;break;
// case 0x78: CM=C; break;
case 0x76: CM=CM+1;realcontrol=0xFC;break;
case 0x77: CM=CM-1;realcontrol=0xFC;break;
}
sci_control=1;
LoadData();
i=0;
number=SCI1SR1;
SCI1DRL=0xff;
SCI1CR2=0x6C; //open te
}
}
else
{
}
}/* wait forever */
}
interrupt void RTIRTI(void)
{
CRGFLG=0x80;
if(timer==8)
{
controlword=1;
timer=0;
}else
{
timer++;
}
}
interrupt void _SCII(void)
{
number=SCI1SR1;
if(sci_control!=0)
{
SCI1DRL=DATANUM[i];
i++;
if(i>22)
{
SCI1CR2=0x2C; //close te
i=0;
sci_control=0; //0,MCU RI;1,MCU TI
}
}
else
{
realcontrol=SCI1DRL;
}
}
