EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机C语言程序设计: 单片机与 PC 通信, t$ v t7 u9 g& ~9 a3 n
0 i& C* p/ R+ O! e: C* z& C. { V$ I: T, Y' C
/* 名称:单片机与 PC 通信 说明:单片机可接收 PC 发 送的数字字符,按下单片机的 K1 键后,单片机可向 PC 发送 字符串。在 Proteus 环境下完成 本 实 验 时 , 需 要 安 装 Virtual Serial Port Driver 和串口调试助 手。本例缓冲 100 个数字字符, 缓冲满后新数字从前面开始存放(环形缓冲)。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar Receive_Buffer[101]; //接收缓冲
, O& ?' i" ? s5 X1 ?% ]$ s! Z! A: E4 a, A+ t+ `) T+ h
uchar Buf_Index=0; //数码管编码 //缓冲空间索引
4 ?6 y6 o, m# ]/ M9 J0 o
5 a5 F1 ~' M" z0 ]2 k% _& e {& Q
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i++); } //主程序 void main() { uchar i; P0=0x00; Receive_Buffer[0]=-1; SCON=0x50; 串口模式 1,允许接收 TMOD=0x20; //T1 工作模式 2 TH1=0xfd; //波特率 9600 TL1=0xfd; PCON=0x00; 波特率不倍增 EA=1;EX0=1;IT0=1; ES=1;IP=0x01; TR1=1; while(1) { for(i=0;i<100;i++) { //收到-1 为一次显示结束 if(Receive_Buffer==-1) break; P0=DSY_CODE[Receive_Buffer]; DelayMS(200); } DelayMS(200); } } //串口接收中断函数 void Serial_INT() interrupt 4 { uchar c; if(RI==0) return; //关闭串口中断 ES=0; //清接收中断标志 RI=0; c=SBUF; if(c>='0'&&c<='9') { //缓存新接收的每个字符,并在其后放-1 为结束标志 Receive_Buffer[Buf_Index]=c-'0'; Receive_Buffer[Buf_Index+1]=-1; Buf_Index=(Buf_Index+1)%100; } ES=1; } void EX_INT0() interrupt 0 //外部中断 0 { uchar *s="这是由 8051 发送的字符串!rn"; uchar i=0; while(s!='') { SBUF=s; while(TI==0); TI=0; i++; } }
. O+ n8 \3 O5 D1 R$ r% J
+ {& ?2 f R$ @0 p" A# b |