黄山学院本科毕业论文
SCON=0x50; //串口工作于方式1 TMOD=0x20; //T1工作于模式2 PCON=0x00; //波特率不加倍 TH1=0xFD; //波特率为9600 TL1=0xFD; TI=RI=0;
TR1=1; //启动定时器1 IE=0x90; //允许串口中断 while(1) { Delay(100);
if(P3!=0X0F) Keys_Scan(); swith(KeyNo) {
case 0:putc_to_serialport(0X00); break;
case 1:putc_to_serialport(0XF8); break;
case 2:putc_to_serialport(0XF9); break;
case 3:putc_to_serialport(0XFA); break;
case 4:putc_to_serialport(0XFB); break;
case 5:putc_to_serialport(0XFC); break;
case 6:putc_to_serialport(0XFD); break;
case 7:putc_to_serialport(0XFE); break;
case 8:putc_to_serialport(0XFF); break; case 16:Display() } } }
/*******主机串口接受中断函数*********/
void Serial_INT() interrupt 4 { if(RI) { int i,j,m; long int n; uchar c; c=SBUF;
36
黄山学院本科毕业论文
i=c*0x05; j=i*0x10; n=j*0x10; m=n/0xFF;
Display_Result(m); }
从机部分程序
# include
#define uchar unsigned char #define uint unsigned int sbit ST=P3^2; sbit EOC=P3^6; sbit OE=P3^7; void Delay(uint x) {
uchar i;
while(x--) for(i=0;i<120;i++); }
/********向串口发送数据子程序********/
void putc_to_SerialPort(uchar c) { SBUF=c;
while(TI==0);TI=0; }
/*********A/D转换子程序*********/
void Adcon() { int j,m=0XF8; uchar n;
for(j=0,P0=m;j++;j<8) { ST=0;ST=1;ST=0; while(EOC==0); OE=1; n=P1;
putc_to_SerialPort(n); m++;} }
/*******主程序*******/
void main()
37
黄山学院本科毕业论文
{
TMOD=0X20; //T1工作于模式2 SCON=0X50; //串口工作于方式1 PCON=0X00; //波特率不加倍 TH1=0XFD; TL1=0XFD; TI=RI=0;
IE=0X90; //允许串口中断 TR1=1; //启动定时器1 while(1) { Delay(100); Adcon(); } }
/********从机串口接受中断函数********/
void serial_INT() interrupt 4 { if(RI) {
RI=0; int i,c; uchar val; c=SBUF;
i=c&0X08; //判断接收到的第四位是否为1,如果为1,则按选定
的通道采集,否则就是循环采集
switch(i) {
case 0: Adcon();break; case 8: P0=c;
ST=0;ST=1;ST=0; while(EOC==0); OE=1; val=P0;
putc_to_SerialPort(val); break;
38