请问各位大神我该如何修改?
单片机源程序如下:
- #include "reg52.h"
- #include "intrins.h "
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit SRCLK=P3^6; //串行输入时钟
- sbit RCLK=P3^5; // 存储寄存器时钟
- sbit SER=P3^6; // 控制串行数据输入
- u8 smgduan[]={0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //选择哪一位smg亮
- code smgwei[]={0x80,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- void UsartInit()
- {
- TMOD=0x20;//0010 0000 T1选择工作方式2(八位自动重装定时/计数器)
- TH1=0xF3; //计算TH1 TL1的波特率;打开常用辅助开发软件的51波特率初值计算 选择方式12 12Mhz 波特率4800 SMOD选择1(令其加倍) 得到F3H
- TL1=0xF3;//跟TH1一样 因为是八位的重装载
- PCON=0x80;//1000 0000 //smod=1时波特率调高一倍
- TR1=1;
- SCON=0x50; //0101 0000 SCON采用方式1; SM2(多机控制位)不使用,令其为0
- ES=1;
- EA=1;
- }
- void main()
- {
- UsartInit();//调用此函数 才能令其初始化
- while(1);
- }
- void delay(unsigned int i)
- {
- while(i--);
- }
- void Usart() interrupt 4//编中断函数
- {
- unsigned int receiveData;
- unsigned int j;
- receiveData=SBUF;
- RI=0;//串行接收停止位的中间时,由内部硬件使RI置1,向CPU发出中断申请。因此需要软件清0来取消中断申请等待下一次的接收
- SBUF=receiveData;
- while(!TI); //判断TI是否发送完成 假设发送完成后TI由硬件置1 则!TI则变为0 就会跳出while循环 ;假设还在发送中,则为0,!TI就是1,就不会跳出循环
- TI=0;//串行接收停止位的中间时,由内部硬件使TI置1,向CPU发出中断申请。因此需要软件清0来取消中断申请等待下一次的发送
- SBUF=P0;
- P0=smgwei[j];
- delay(100);
- P0=0x00; //消影
- }
复制代码
|