📄 chuankou.src
字号:
; .\chuankou.SRC generated from: chuankou.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE chuankou.c BROWSE DEBUG OBJECTEXTEND SRC(.\chuankou.SRC)
$NOMOD51
NAME CHUANKOU
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
AC BIT 0D0H.6
T0 BIT 0B0H.4
T1 BIT 0B0H.5
EA BIT 0A8H.7
T2 BIT 090H.0
IE DATA 0A8H
P0_0 BIT 080H.0
P1_0 BIT 090H.0
P0_1 BIT 080H.1
FL BIT 0D0H.1
P2_0 BIT 0A0H.0
P1_1 BIT 090H.1
P0_2 BIT 080H.2
P3_0 BIT 0B0H.0
P2_1 BIT 0A0H.1
P1_2 BIT 090H.2
P0_3 BIT 080H.3
P3_1 BIT 0B0H.1
P2_2 BIT 0A0H.2
P1_3 BIT 090H.3
P0_4 BIT 080H.4
P3_2 BIT 0B0H.2
P2_3 BIT 0A0H.3
P1_4 BIT 090H.4
P0_5 BIT 080H.5
EXF2 BIT 0C8H.6
RD BIT 0B0H.7
P3_3 BIT 0B0H.3
P2_4 BIT 0A0H.4
P1_5 BIT 090H.5
P0_6 BIT 080H.6
P3_4 BIT 0B0H.4
P2_5 BIT 0A0H.5
P1_6 BIT 090H.6
P0_7 BIT 080H.7
P3_5 BIT 0B0H.5
ES BIT 0A8H.4
P2_6 BIT 0A0H.6
P1_7 BIT 090H.7
P3_6 BIT 0B0H.6
P2_7 BIT 0A0H.7
IP DATA 0B8H
P3_7 BIT 0B0H.7
RI BIT 098H.0
CY BIT 0D0H.7
INT0 BIT 0B0H.2
INT1 BIT 0B0H.3
TI BIT 098H.1
RCAP2H DATA 0CBH
PS BIT 0B8H.4
SP DATA 081H
T2EX BIT 090H.1
OV BIT 0D0H.2
RCAP2L DATA 0CAH
C_T2 BIT 0C8H.1
WR BIT 0B0H.6
RCLK BIT 0C8H.5
TCLK BIT 0C8H.4
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
CP_RL2 BIT 0C8H.0
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
ET2 BIT 0A8H.5
TF1 BIT 088H.7
TF2 BIT 0C8H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
EX1 BIT 0A8H.2
TB8 BIT 098H.3
IT1 BIT 088H.2
TH2 DATA 0CDH
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
TL2 DATA 0CCH
PT0 BIT 0B8H.1
RS0 BIT 0D0H.3
PT1 BIT 0B8H.3
RS1 BIT 0D0H.4
PT2 BIT 0B8H.5
TR0 BIT 088H.4
TR1 BIT 088H.6
TR2 BIT 0C8H.2
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
EXEN2 BIT 0C8H.3
REN BIT 098H.4
T2MOD DATA 0C9H
T2CON DATA 0C8H
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?esint?CHUANKOU SEGMENT CODE
?PR?kint?CHUANKOU SEGMENT CODE
?PR?main?CHUANKOU SEGMENT CODE
?CO?CHUANKOU SEGMENT CODE
?DT?CHUANKOU SEGMENT DATA
EXTRN CODE (?C?CLDPTR)
EXTRN CODE (?C_STARTUP)
PUBLIC fs
PUBLIC as
PUBLIC pin
PUBLIC a?
PUBLIC main
PUBLIC kint
PUBLIC esint
RSEG ?DT?CHUANKOU
pin: DS 3
as: DS 1
fs: DS 1
RSEG ?CO?CHUANKOU
a?:
DB 03FH
DB 006H
DB 05BH
DB 04FH
DB 066H
DB 06DH
DB 07DH
DB 007H
DB 07FH
DB 06FH
DB 077H
DB 07CH
DB 039H
DB 05EH
DB 079H
DB 071H
DB 073H
; #include"at89x52.h" //头文件
; #define uchar unsigned char //宏定义用ushar表示unsigned char
; #define uint unsigned int //宏定义用uint表示unsigned int
;
; uchar code a[]={0x3f,0x06,0x5b,0x4f,
; 0x66,0x6d,0x7d,0x07,0x7f,
; 0x6f,0x77,0x7c,0x39,
; 0x5e,0x79,0x71,0x73}; //共阴的LED段码,分别为0123456789AbCdEFP
; uchar fs,as; //串口发送、接收变量
; uchar *pin; //指向LED段码的指针变量
;
CSEG AT 00023H
LJMP esint
; void esint() interrupt 4 //串口的中断服务程序
RSEG ?PR?esint?CHUANKOU
USING 0
esint:
PUSH ACC
PUSH PSW
; SOURCE LINE # 12
; {
; if(RI==1) //如果是接收中断
; SOURCE LINE # 14
JNB RI,?C0001
; {
; SOURCE LINE # 15
; RI=0; //先将接收标志位清0
; SOURCE LINE # 16
CLR RI
; as=SBUF; //将接收缓存中的数据送到接收变量中暂存
; SOURCE LINE # 17
MOV as,SBUF
; pin++; //移动指针在a[ ]中的位置
; SOURCE LINE # 18
MOV A,#01H
ADD A,pin+02H
MOV pin+02H,A
CLR A
ADDC A,pin+01H
MOV pin+01H,A
; if(as==0x88) //收到正确奇偶校验的处理程序
; SOURCE LINE # 19
MOV A,as
CJNE A,#088H,?C0002
; {
; SOURCE LINE # 20
; P1_7=0; //P1.7上的LED灯亮(注意P1.7上的LED是反接的)
; SOURCE LINE # 21
CLR P1_7
; }
; SOURCE LINE # 22
SJMP ?C0003
?C0002:
; else //收到错误奇偶校验的处理
; P1_7=1; //P1.7上的LED灯灭
; SOURCE LINE # 24
SETB P1_7
?C0003:
;
; if (as==0x73) /*如果收到回发的数据是0x73,即最后一个数据"P"已正确接收了(与接收
; SOURCE LINE # 26
MOV A,as
CJNE A,#073H,?C0006
; 机约定在收到最后一个数据时回发0x73)*/
; {
; SOURCE LINE # 28
; EA=0; //确定最后一个数据正确发出后,发射机关闭中断允许位,停止工作
; SOURCE LINE # 29
CLR EA
; }
; SOURCE LINE # 30
;
; }
; SOURCE LINE # 32
SJMP ?C0006
?C0001:
;
;
; else //如果不是接收中断,那即是发送中断
; {
; SOURCE LINE # 36
; TI=0; //将发送标志位清0
; SOURCE LINE # 37
CLR TI
; }
; SOURCE LINE # 38
; }
; SOURCE LINE # 39
?C0006:
POP PSW
POP ACC
RETI
; END OF esint
CSEG AT 00003H
LJMP kint
;
; void kint() interrupt 0 //外部中断0(INT0)的中断服务程序
RSEG ?PR?kint?CHUANKOU
USING 0
kint:
PUSH ACC
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR1
PUSH AR2
PUSH AR3
USING 0
; SOURCE LINE # 41
?C0007:
; {
; while(TI==1); //如果此时串口在发送数据则等待
; SOURCE LINE # 43
JB TI,?C0007
?C0008:
; fs=*pin; //将指向LED段码(a[ ])的地址中的数值赋给发送变量
; SOURCE LINE # 44
MOV R3,pin
MOV R2,pin+01H
MOV R1,pin+02H
LCALL ?C?CLDPTR
MOV fs,A
;
; #pragma asm /*加入奇偶校验位(C语言中嵌套汇编语句,注意添加C51S.LIB文件)*/
; MOV A,FS //将fs中存储的LED段码地址赋给变量A
MOV A,FS
; JB P,BTB8 /*小于转移,如果P为1则跳转至BTB8。这里P是程序状态字PSW中的最低
JB P,BTB8
; 位,功能是做奇偶校验,当发送数据为奇数位时,P=1;否则为0*。并且P的设置是在数据进入SBUF时自动生成的*/
; CLR TB8 //否则将发送数据的奇偶校验位清0
CLR TB8
; CLR P2.7 //P2.7清0,即P2.7上的LED灯灭
CLR P2.7
; AJMP ETB8 //跳转至ETB8
AJMP ETB8
;
; btb8:SETB TB8 //将发送数据的奇偶校验为置1
btb8:SETB TB8
; SETB P2.7 //P2.7置1,即P2.7上的LED灯亮
SETB P2.7
; etb8: cpl p2.0 //P2.0清0,即P2.0上的LED灯灭
etb8: cpl p2.0
; #pragma endasm //汇编语句嵌套结束
; SBUF=fs; //将要发送的数据送至发送缓存
; SOURCE LINE # 58
MOV SBUF,fs
; }
; SOURCE LINE # 59
POP AR3
POP AR2
POP AR1
POP PSW
POP DPL
POP DPH
POP ACC
RETI
; END OF kint
;
; void main()
RSEG ?PR?main?CHUANKOU
main:
; SOURCE LINE # 61
; {
; SOURCE LINE # 62
; TCON=0x01; //设置中断请求标志IT0=1,设置外部中断0为下降沿触发
; SOURCE LINE # 63
MOV TCON,#01H
; IE=0x91; //中断允许标志,EA=1,ES=1,开串口中断,EX0=1,开外部中断0
; SOURCE LINE # 64
MOV IE,#091H
; IP=0x10; //设置中断优先级,PS=1,串口中断优先
; SOURCE LINE # 65
MOV IP,#010H
; SCON = 0X90; /*串口控制字1001 0000,工作在方式2,即11位异步收发,允许接收,将串口的
; SOURCE LINE # 66
MOV SCON,#090H
; 中断标志TI、RI位全部清0 。(注意,因为工作在方式2,所以波特率固定为fOSC/64,且不用设置TMOD、TH1、TL1、TR1)*/
; PCON |= 0X80; //波特率加倍,现在为fOSC/32
; SOURCE LINE # 68
ORL PCON,#080H
; pin=&a[0]; //初始化指针,使pin指向LED段码(数组a[ ])的入口地址
; SOURCE LINE # 69
MOV pin,#0FFH
MOV pin+01H,#HIGH (a?)
MOV pin+02H,#LOW (a?)
?C0010:
;
; while(1); //死循环里执行空语句,等待中断发生(注意分号)
; SOURCE LINE # 71
SJMP ?C0010
; END OF main
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -