📄 单片机与电脑通讯.lst
字号:
C51 COMPILER V7.50 单芲籣与电脑通讯 04/03/2007 20:06:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 单芲籣与电脑通讯
OBJECT MODULE PLACED IN 单片机与电脑通讯.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 单片机与电脑通讯.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //MCU: AT89S51
2 //晶振:11.0592M (一定要用这个晶振)
3
4 #include"AT89X51.H"
5 #include "absacc.h"
6 #include "stdio.h"
7 #include "stdlib.h"
8 unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
9 0x92,0x82,0xf8,0x80,0x90,
10
11 };//数字0~9及"-"共阳数码管代码
12 unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
13 0xef,0xdf,0xbf,0x7f};
14
15 unsigned char dispbuff[8]={0,0,0,0,0,0,0,0};
16 unsigned char disp_bit_count;
17 unsigned char disp_count;
18
19 unsigned char send_allow=1;
20 unsigned int send_count; /*定时器计数变量*/
21 unsigned char zhi=0;
22 unsigned char r_char;
23
24 /********1ms延时子程序***********/
25 delay_nms(unsigned int n)
26 {
27 1 unsigned int i;
28 1 unsigned char j;
29 1
30 1 for(i=0;i<n;i++)
31 1 for(j=0;j<120;j++)
32 1 ; //空操作
33 1 }
34
35
36 void main(void)
37 {
38 1 // 以下是设置中断和定时器
39 1 PT0=1;
40 1 ET0=1;
41 1 ES=1; //开串口接收中断
42 1 IT0=1;IT1=1;
43 1
44 1 TMOD=0X20;
45 1
46 1 // 定时器0为产生1ms的中断,定时器1为9600bit/s 的波特率发生器
47 1 TH0=-1000/256;
48 1 TL0=-1000%256;
49 1 TL1=0xfd; //波特率发生
50 1 TH1=0xfd;
51 1 SCON=0xd8;
52 1 PCON=0X00;//波特率不加倍
53 1 // 开定时器
54 1 TR1=1;
55 1 TR0=1;
C51 COMPILER V7.50 单芲籣与电脑通讯 04/03/2007 20:06:11 PAGE 2
56 1 TI=1;
57 1 EA=1;
58 1 while(1)
59 1 {
60 2 if(P2_0==0)
61 2 {
62 3 delay_nms(2);
63 3 if(P2_0==0)
64 3 {
65 4 //按键SW1按下,停止发送,再按一下继续发送
66 4 send_allow^=1;
67 4 while(P2_0==0);
68 4 }
69 3 }
70 2
71 2 }
72 1 }
73
74 // 定时器0的中断服务程序,向串口发送姿态数据。
75 void intsvr1(void) interrupt 1
76 {
77 1
78 1 // 重新装入定时器0的初值;
79 1 TH0=-1000/256;
80 1 TL0=-1000%256;
81 1 send_count++;
82 1 /*****数码管显示*********/
83 1 disp_count++;
84 1 if(disp_count==4)
85 1 {
86 2 disp_count=0;
87 2 P0=numcode[dispbuff[disp_bit_count]];
88 2 P1=dispbitcode[disp_bit_count];
89 2 disp_bit_count++;
90 2 if(disp_bit_count==8)
91 2 {
92 3 disp_bit_count=0;
93 3 }
94 2 }
95 1 if(disp_count==8)
96 1 {
97 2 disp_count=0;
98 2 }
99 1 /////////////////////////////////////////////////
100 1 //***每隔0.2秒发一个字符到电脑上
101 1 if (send_count==200) // 0.2秒判断
102 1 {
103 2 send_count=0;
104 2 if(send_allow==1)
105 2 {
106 3 putchar(zhi);// 发送字符
107 3 zhi++;
108 3 }
109 2 }
110 1 }
111
112
113 void receive(void) interrupt 4 using 1
114 {
115 1 RI=0; //清楚接收标志位
116 1 r_char=SBUF; //将接收缓冲区数据读出
117 1 dispbuff[2]=r_char/100;
C51 COMPILER V7.50 单芲籣与电脑通讯 04/03/2007 20:06:11 PAGE 3
118 1 dispbuff[1]=(r_char%100)/10;
119 1 dispbuff[0]=r_char%10;
120 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 275 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -