- #include<reg52.h>
- unsigned char code trdata[]={'f','r','e','e','d','o','m',0x0a,0x00};
- sbit P32=P3^2; //INT0的控制管脚
- unsigned char i,tmp;
- void delay1ms(unsigned int n) //1ms基准延时
- {
- unsigned i;
- while(n--)
- for(i=0;i<115;i++);
- }
- void main()
- {
- TMOD=0x20; //定时器工作方式2, 8位自动重装
- TH1=TL1=0xfd; //产生9600的bps
- TR1=1; //启动T1
- EA=1; //开放总中断
- ES=1; //允许串口中断
- EX0=1; //允许INT0中断
- SCON=0x50; //串口工作方式1,允许接受数据
- PCON=0x00; // 不倍增bps
- while(1); //无限循环等待中断
-
- }
- void int0() interrupt 0 //INT0的中断编号
- {
- if(P32==0){
- delay1ms(20); //消陡
- if(P32==0){
- i=0;
- while(trdata[i]!=0x00){
- SBUF=trdata[i];
- while(!TI); //等待数据传送,传完一个字节后TI=1
- TI=0;
- i++;
- }
- while(!P32); //等待按键释放
- }
- }
- }
- void send_char() interrupt 4 //串口中断的编号
- {
- if(RI==1){ //收到1字节的数据时,RI=1,申请串口中断
- RI=0; //软件清0
- tmp=SBUF;
- P0=tmp;
- SBUF=tmp; //向PC发送数据
- while(!TI); //等待发送
- TI=0; //清0
- }
- }
复制代码
|