📄 counter.src
字号:
; .\counter.SRC generated from: counter.c
; COMPILER INVOKED BY:
; E:\Program Files\C51\BIN\C51.EXE counter.c BROWSE DEBUG OBJECTEXTEND SRC(.\counter.SRC)
$NOMOD51
NAME COUNTER
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
T2 BIT 090H.0
EA BIT 0A8H.7
IE DATA 0A8H
EXF2 BIT 0C8H.6
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
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
addr0 BIT 090H.4
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
addr1 BIT 090H.5
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
TH2 DATA 0CDH
addr2 BIT 090H.6
P BIT 0D0H.0
addr3 BIT 090H.7
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
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
PT2 BIT 0B8H.5
TR0 BIT 088H.4
RS1 BIT 0D0H.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
T2CON DATA 0C8H
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?_delay?COUNTER SEGMENT CODE
?PR?initial?COUNTER SEGMENT CODE
?PR?feedbuffer?COUNTER SEGMENT CODE
?PR?vLedKey_Scan?COUNTER SEGMENT CODE
?PR?main?COUNTER SEGMENT CODE
?PR?int50ms?COUNTER SEGMENT CODE
?CO?COUNTER SEGMENT CODE
?DT?COUNTER SEGMENT DATA
EXTRN CODE (?C?UIDIV)
EXTRN CODE (?C_STARTUP)
PUBLIC dispbuf
PUBLIC count
PUBLIC table
PUBLIC scan
PUBLIC int50ms
PUBLIC main
PUBLIC vLedKey_Scan
PUBLIC feedbuffer
PUBLIC initial
PUBLIC _delay
RSEG ?DT?COUNTER
count: DS 2
dispbuf: DS 8
RSEG ?CO?COUNTER
scan:
DB 0FEH
DB 0FDH
DB 0FBH
DB 0F7H
DB 0EFH
DB 0DFH
DB 0BFH
DB 07FH
table:
DB 0C0H
DB 0F9H
DB 0A4H
DB 0B0H
DB 099H
DB 092H
DB 082H
DB 0F8H
DB 080H
DB 090H
DB 088H
DB 083H
DB 0C6H
DB 0A1H
DB 086H
DB 08EH
DB 0BFH
DB 0FFH
; /*****************************************************************/
; /* */
; /*名称: 外部计数+显示程序 */
; /*功能: 单片机外部输入脉冲信号,定时器参与计数 */
; /* 计数值由数码管显示出来。 */
; /*难度等级: 中 */
; /* 作者: zengrenliang */
; /* 版权: http://www.51kaifa.com */
; /*编写日期: 2006.05.19 */
; /*****************************************************************/
;
;
;
; #include<reg52.h>
; #define uchar unsigned char
;
;
; sbit addr0 = P1^4;//系统片选地址线0
; sbit addr1 = P1^5;//系统片选地址线1
; sbit addr2 = P1^6;//系统片选地址线2
; sbit addr3 = P1^7;//系统片选地址线3
;
; //行扫描数组
; uchar code scan[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//row0--row7
; //数码管显示的段码表
; uchar code table[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//0,1,2,3,4,5
; 0x82,0xf8,0x80,0x90,0x88,0x83,//6,7,8,9,a,b
; 0xc6,0xa1,0x86,0x8e,0xbf,0xff};//c,d,e,f,-,空格
;
; uchar dispbuf[8]; //显示缓冲区
; unsigned int count;
;
; /*****************************延时函数**************************/
;
; void delay (unsigned int us)
RSEG ?PR?_delay?COUNTER
_delay:
USING 0
; SOURCE LINE # 35
;---- Variable 'us?040' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 36
?C0001:
; while(us--);
; SOURCE LINE # 37
MOV A,R7
DEC R7
MOV R4,AR6
JNZ ?C0017
DEC R6
?C0017:
ORL A,R4
JNZ ?C0001
; }
; SOURCE LINE # 38
?C0003:
RET
; END OF _delay
;
; void initial()
RSEG ?PR?initial?COUNTER
initial:
USING 0
; SOURCE LINE # 40
; { uchar j;
; SOURCE LINE # 41
; count=0;//秒清零
; SOURCE LINE # 42
CLR A
MOV count,A
MOV count+01H,A
; for(j=0;j<6;j++)
; SOURCE LINE # 43
;---- Variable 'j?141' assigned to Register 'R7' ----
?C0004:
; dispbuf[j] = 0;//清数码管显示缓冲区
; SOURCE LINE # 44
MOV R7,#06H
MOV R0,#LOW (dispbuf)
CLR A
?C0018:
MOV @R0,A
INC R0
DJNZ R7,?C0018
?C0005:
; TMOD = 0x05;//T0 T1工作于方式1
; SOURCE LINE # 45
MOV TMOD,#05H
; TL0 = 0xff;
; SOURCE LINE # 46
MOV TL0,#0FFH
; TH0 = 0xff;//50ms定时初值
; SOURCE LINE # 47
MOV TH0,#0FFH
;
; ET0 = 1;//允许T1中断
; SOURCE LINE # 49
SETB ET0
; PT0 = 1;//T1中断优先级高
; SOURCE LINE # 50
SETB PT0
;
; EA = 1;//开中断
; SOURCE LINE # 52
SETB EA
; TR0 = 1;//T1开始计时
; SOURCE LINE # 53
SETB TR0
; }
; SOURCE LINE # 54
RET
; END OF initial
;
;
; /*************************************填充显示缓冲区****************************/
;
; void feedbuffer()
RSEG ?PR?feedbuffer?COUNTER
feedbuffer:
USING 0
; SOURCE LINE # 59
; {
; SOURCE LINE # 60
; unsigned int temp;
;
; temp = count;
; SOURCE LINE # 63
;---- Variable 'temp?242' assigned to Register 'R2/R3' ----
MOV R3,count+01H
MOV R2,count
; dispbuf[5] = temp % 10;//分个位
; SOURCE LINE # 64
MOV R4,#00H
MOV R5,#0AH
MOV R7,AR3
MOV R6,AR2
LCALL ?C?UIDIV
MOV dispbuf+05H,R5
; temp = temp / 10;
; SOURCE LINE # 65
MOV R4,#00H
MOV R5,#0AH
MOV R7,AR3
MOV R6,AR2
LCALL ?C?UIDIV
MOV R2,AR6
MOV R3,AR7
; dispbuf[4] = temp % 10;//分十位
; SOURCE LINE # 66
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV dispbuf+04H,R5
;
; temp = temp / 10;
; SOURCE LINE # 68
MOV R4,#00H
MOV R5,#0AH
MOV R7,AR3
MOV R6,AR2
LCALL ?C?UIDIV
MOV R2,AR6
MOV R3,AR7
; dispbuf[3] =temp % 10;//时百位
; SOURCE LINE # 69
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV dispbuf+03H,R5
; temp = temp / 10;
; SOURCE LINE # 70
MOV R4,#00H
MOV R5,#0AH
MOV R7,AR3
MOV R6,AR2
LCALL ?C?UIDIV
MOV R2,AR6
MOV R3,AR7
; dispbuf[2] =temp % 10;//时千位
; SOURCE LINE # 71
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV dispbuf+02H,R5
;
; temp = temp / 10;
; SOURCE LINE # 73
MOV R4,#00H
MOV R5,#0AH
MOV R7,AR3
MOV R6,AR2
LCALL ?C?UIDIV
MOV R2,AR6
MOV R3,AR7
; dispbuf[1] =temp % 10;//时万位
; SOURCE LINE # 74
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV dispbuf+01H,R5
; temp = temp / 10;
; SOURCE LINE # 75
MOV R4,#00H
MOV R5,#0AH
MOV R7,AR3
MOV R6,AR2
LCALL ?C?UIDIV
; dispbuf[0] =temp % 10;//时十万位
; SOURCE LINE # 76
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?UIDIV
MOV dispbuf,R5
;
; }
; SOURCE LINE # 78
RET
; END OF feedbuffer
;
;
;
;
; /******************************显示+读键*************************/
;
; void vLedKey_Scan()
RSEG ?PR?vLedKey_Scan?COUNTER
vLedKey_Scan:
USING 0
; SOURCE LINE # 85
; { unsigned char i,value;
; SOURCE LINE # 86
;
; for(i=0;i<8;i++){
; SOURCE LINE # 88
;---- Variable 'i?343' assigned to Register 'R5' ----
CLR A
MOV R5,A
?C0009:
; addr3 = 0;
; SOURCE LINE # 89
CLR addr3
; addr0 = 0;
; SOURCE LINE # 90
CLR addr0
; addr1 = 1;
; SOURCE LINE # 91
SETB addr1
; addr2 = 0;//开发板上U4(74HC574)的片选地址
; SOURCE LINE # 92
CLR addr2
; value =table[dispbuf[i]]; //取一行显示数据
; SOURCE LINE # 93
MOV A,#LOW (dispbuf)
ADD A,R5
MOV R0,A
MOV A,@R0
MOV DPTR,#table
MOVC A,@A+DPTR
;---- Variable 'value?344' assigned to Register 'R3' ----
MOV R3,A
; P0 = value;
; SOURCE LINE # 94
MOV P0,A
; addr3 = 1;
; SOURCE LINE # 95
SETB addr3
; addr3 = 0;//在U4的11脚(锁存信号)产生上升沿
; SOURCE LINE # 96
CLR addr3
; P2 = scan[i];//取row0--row7行扫描数据
; SOURCE LINE # 97
MOV A,R5
MOV DPTR,#scan
MOVC A,@A+DPTR
MOV P2,A
; delay(50); //延时50us
; SOURCE LINE # 98
MOV R7,#032H
MOV R6,#00H
LCALL _delay
; P2 = 0xff;//关显示
; SOURCE LINE # 99
MOV P2,#0FFH
; }
; SOURCE LINE # 100
INC R5
CJNE R5,#08H,?C0009
; }
; SOURCE LINE # 101
?C0012:
RET
; END OF vLedKey_Scan
;
; /*******************************主函数***********************/
;
; main()
RSEG ?PR?main?COUNTER
main:
USING 0
; SOURCE LINE # 105
; {
; SOURCE LINE # 106
; initial();
; SOURCE LINE # 107
LCALL initial
?C0013:
; while(1){
; SOURCE LINE # 108
; vLedKey_Scan(); //显示,读键扫描
; SOURCE LINE # 109
LCALL vLedKey_Scan
; }
; SOURCE LINE # 110
SJMP ?C0013
; END OF main
CSEG AT 0000BH
LJMP int50ms
; }
;
;
;
; //计数中断服务
; void int50ms() interrupt 1
RSEG ?PR?int50ms?COUNTER
USING 0
int50ms:
PUSH ACC
PUSH B
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
USING 0
; SOURCE LINE # 116
; {
; TR0=0;//关定时器T0
; SOURCE LINE # 118
CLR TR0
; TL0= 0xff;
; SOURCE LINE # 119
MOV TL0,#0FFH
; TH0= 0xff;//赋定时初值
; SOURCE LINE # 120
MOV TH0,#0FFH
; TR0=1;//开定时器T0
; SOURCE LINE # 121
SETB TR0
; count++;//50ms计数加1
; SOURCE LINE # 122
INC count+01H
MOV A,count+01H
JNZ ?C0019
INC count
?C0019:
; feedbuffer();
; SOURCE LINE # 123
LCALL feedbuffer
; }
; SOURCE LINE # 124
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR0
POP PSW
POP B
POP ACC
RETI
; END OF int50ms
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -