⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2402main.src

📁 51单片机实验例程
💻 SRC
字号:
; 2402Main.SRC generated from: 2402Main.c
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE 2402Main.c BROWSE DEBUG OBJECTEXTEND

$NOMOD51

NAME	_2402MAIN

K4	BIT	090H.3
LS138B	BIT	0A0H.3
LS138C	BIT	0A0H.4
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
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
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
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
K1	BIT	090H.0
K2	BIT	090H.1
K3	BIT	090H.2
LS138A	BIT	0A0H.2
?PR?system_ini?2402MAIN                  SEGMENT CODE 
?PR?main?2402MAIN    SEGMENT CODE 
?DT?main?2402MAIN    SEGMENT DATA OVERLAYABLE 
?PR?_delay?2402MAIN  SEGMENT CODE 
?PR?T1zd?2402MAIN    SEGMENT CODE 
?CO?2402MAIN         SEGMENT CODE 
?ID?2402MAIN         SEGMENT IDATA 
?DT?2402MAIN         SEGMENT DATA 
	EXTRN	CODE (_IRcvStr)
	EXTRN	DATA (?_IRcvStr?BYTE)
	EXTRN	CODE (_ISendStr)
	EXTRN	DATA (?_ISendStr?BYTE)
	EXTRN	CODE (?C_STARTUP)
	EXTRN	CODE (?C?LSTIDATA)
	EXTRN	CODE (?C?LLDIDATA)
	EXTRN	CODE (?C?ULSHR)
	EXTRN	CODE (?C?ULDIV)
	PUBLIC	LedNumVal
	PUBLIC	LedOut
	PUBLIC	D
	PUBLIC	Count1
	PUBLIC	USEC
	PUBLIC	Disp_Tab
	PUBLIC	T1zd
	PUBLIC	_delay
	PUBLIC	main
	PUBLIC	system_ini

	RSEG  ?DT?main?2402MAIN
?main?BYTE:
          i?140:   DS   1
       pDat?141:   DS   8

	RSEG  ?ID?2402MAIN
           USEC:   DS   2

	RSEG  ?DT?2402MAIN
         Count1:   DS   1
              D:   DS   64
         LedOut:   DS   20
      LedNumVal:   DS   4

	RSEG  ?CO?2402MAIN
Disp_Tab:
	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	0BFH
	DB	0C7H
	DB	08CH
	DB	0C1H
	DB	0FFH
	DB	0F7H

; /*******************************************************************************
;  标题:                  EEPROM读写试验(按钮输入)							   *
; ********************************************************************************
; 																			   *
; 此例程学员更进一步地熟悉并掌握(存储芯片AT2402)的操作,有保存和读取操作 	   *			   
; 了解掌握I2C总线接口的工作原理及一般编程方法。								   *
;                                                                                *		  
; 跳线操作:P0(JP10)连 数码管(JP12)										   *
;           P1(JP8 )连 独立按键(JP5)										   *
; 																			   *
; 具体操作:	第1个按钮保存      第2个按钮读取							       *
;             第3个按钮减减        第4个按钮加数							       *
; 																			   *		  	   
; 希望学员认真体会消化此例程!												   *							  
; ********************************************************************************/

; #include<Function.h>
; #include<reg52.h>
; 
; #define  AT24C02 0xa0  //AT24C02 地址
; 
; //else IO
; sbit    LS138A=P2^2;  	//译码器端
; sbit    LS138B=P2^3;
; sbit    LS138C=P2^4; 
; 
; sbit    K1 = P1^0;	 //保存
; sbit    K2 = P1^1;	 //读取
; sbit    K3 = P1^2;	 //+数据
; sbit    K4 = P1^3;   //-数据
; 
; void delay(unsigned int i);
; 
; 
; // 此表为 LED 的字模            // 0    1    2    3    4    5    6   7    8    9    A    b    c    d    E    -    L   P    U    Hidden  _ (20)
; unsigned char code  Disp_Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff,  0xf7 }; 
; 
; unsigned char Count1;
; unsigned long D[16], LedOut[5],LedNumVal;
; unsigned int idata USEC;
; 
;   
; void  system_ini() 

	RSEG  ?PR?system_ini?2402MAIN
system_ini:
			; SOURCE LINE # 43
; {    
			; SOURCE LINE # 44
;     TMOD|= 0x11;
			; SOURCE LINE # 45
	ORL  	TMOD,#011H
;     TH1 = 0xfe; //11.0592
			; SOURCE LINE # 46
	MOV  	TH1,#0FEH
; 	TL1 = 0x33;
			; SOURCE LINE # 47
	MOV  	TL1,#033H
; 	TR1  = 1; 
			; SOURCE LINE # 48
	SETB 	TR1
;     IE =0x8A;
			; SOURCE LINE # 49
	MOV  	IE,#08AH
; 
; }
			; SOURCE LINE # 51
	RET  	
; END OF system_ini

; 
;  main()

	RSEG  ?PR?main?2402MAIN
main:
	USING	0
			; SOURCE LINE # 53
;  { 	unsigned char i;
			; SOURCE LINE # 54
; 	unsigned char pDat[8];
; 
;    system_ini();
			; SOURCE LINE # 57
	LCALL	system_ini
?C0002:
;    while(1)
			; SOURCE LINE # 58
;    {
			; SOURCE LINE # 59
; 		 //========================IIC 读取
; 	if(K2 == 0)	   //第二个按钮读取数据
			; SOURCE LINE # 61
	JB   	K2,?C0004
; 	{ 
			; SOURCE LINE # 62
; 	  IRcvStr(AT24C02, 0 , &pDat[0], 8); 
			; SOURCE LINE # 63
	MOV  	R3,#00H
	MOV  	R2,#HIGH (pDat?141)
	MOV  	R1,#LOW (pDat?141)
	MOV  	?_IRcvStr?BYTE+05H,#08H
	CLR  	A
	MOV  	R5,A
	MOV  	R7,#0A0H
	LCALL	_IRcvStr
; 	  for (i=0; i<4; i++)
			; SOURCE LINE # 64
	CLR  	A
	MOV  	i?140,A
?C0005:
; 	  {
			; SOURCE LINE # 65
; 		D[14+i]=pDat[i*2+0]+pDat[i*2+1]*0x100;
			; SOURCE LINE # 66
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,#LOW (pDat?141+01H)
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	R6,A
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,#LOW (pDat?141)
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	R4,#00H
	ADD  	A,#00H
	MOV  	R7,A
	MOV  	A,R4
	ADDC 	A,R6
	MOV  	R6,A
	CLR  	A
	MOV  	R5,A
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,ACC
	ADD  	A,#LOW (D+038H)
	MOV  	R0,A
	LCALL	?C?LSTIDATA
; 		Count1 = D[14];
			; SOURCE LINE # 67
	MOV  	Count1,D+03BH
; 	   }	     
			; SOURCE LINE # 68
	INC  	i?140
	MOV  	A,i?140
	CJNE 	A,#04H,?C0005
; 	 }
			; SOURCE LINE # 69
?C0004:
; 
; 	   //========================IIC 保存
; 	   if(K1 == 0)    //第一个按钮保存数据
			; SOURCE LINE # 72
	JB   	K1,?C0008
; 	   { 
			; SOURCE LINE # 73
; 	      D[14]= Count1;
			; SOURCE LINE # 74
	CLR  	A
	MOV  	D+03BH,Count1
	MOV  	D+03AH,A
	MOV  	D+039H,A
	MOV  	D+038H,A
; 		 for (i=0; i<4; i++)
			; SOURCE LINE # 75
	MOV  	i?140,A
?C0009:
; 	     {
			; SOURCE LINE # 76
; 		   pDat[i*2+0]=D[14+i];
			; SOURCE LINE # 77
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,ACC
	ADD  	A,#LOW (D+038H)
	MOV  	R0,A
	LCALL	?C?LLDIDATA
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,#LOW (pDat?141)
	MOV  	R0,A
	MOV  	@R0,AR7
; 		   pDat[i*2+1]=D[14+i]>>8;
			; SOURCE LINE # 78
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,ACC
	ADD  	A,#LOW (D+038H)
	MOV  	R0,A
	LCALL	?C?LLDIDATA
	MOV  	R0,#08H
	LCALL	?C?ULSHR
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,#LOW (pDat?141+01H)
	MOV  	R0,A
	MOV  	@R0,AR7
; 		 }
			; SOURCE LINE # 79
	INC  	i?140
	MOV  	A,i?140
	CJNE 	A,#04H,?C0009
?C0010:
; 	     ISendStr(AT24C02, 0 , &pDat[0], 8); 
			; SOURCE LINE # 80
	MOV  	R3,#00H
	MOV  	R2,#HIGH (pDat?141)
	MOV  	R1,#LOW (pDat?141)
	MOV  	?_ISendStr?BYTE+05H,#08H
	CLR  	A
	MOV  	R5,A
	MOV  	R7,#0A0H
	LCALL	_ISendStr
;        }
			; SOURCE LINE # 81
?C0008:
; 
; 
; 	  /********以下将2402中保存的数据送到LED数码管显示*************/
;         LedNumVal=Count1;
			; SOURCE LINE # 85
	CLR  	A
	MOV  	LedNumVal+03H,Count1
	MOV  	LedNumVal+02H,A
	MOV  	LedNumVal+01H,A
	MOV  	LedNumVal,A
; 	  LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
			; SOURCE LINE # 86
	MOV  	R3,#010H
	MOV  	R2,#027H
	MOV  	R1,A
	MOV  	R0,A
	MOV  	R7,LedNumVal+03H
	MOV  	R6,LedNumVal+02H
	MOV  	R5,LedNumVal+01H
	MOV  	R4,LedNumVal
	LCALL	?C?ULDIV
	MOV  	R4,AR0
	MOV  	R5,AR1
	MOV  	R6,AR2
	MOV  	R7,AR3
	CLR  	A
	MOV  	R3,#0E8H
	MOV  	R2,#03H
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?ULDIV
	MOV  	A,#LOW (Disp_Tab)
	ADD  	A,R7
	MOV  	DPL,A
	MOV  	A,#HIGH (Disp_Tab)
	ADDC 	A,R6
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	LedOut+03H,R7
	MOV  	LedOut+02H,A
	MOV  	LedOut+01H,A
	MOV  	LedOut,A
;       LedOut[1]=Disp_Tab[LedNumVal%1000/100];
			; SOURCE LINE # 87
	MOV  	R3,#0E8H
	MOV  	R2,#03H
	MOV  	R1,A
	MOV  	R0,A
	MOV  	R7,LedNumVal+03H
	MOV  	R6,LedNumVal+02H
	MOV  	R5,LedNumVal+01H
	MOV  	R4,LedNumVal
	LCALL	?C?ULDIV
	MOV  	R4,AR0
	MOV  	R5,AR1
	MOV  	R6,AR2
	MOV  	R7,AR3
	CLR  	A
	MOV  	R3,#064H
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?ULDIV
	MOV  	A,#LOW (Disp_Tab)
	ADD  	A,R7
	MOV  	DPL,A
	MOV  	A,#HIGH (Disp_Tab)
	ADDC 	A,R6
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	LedOut+07H,R7
	MOV  	LedOut+06H,A
	MOV  	LedOut+05H,A
	MOV  	LedOut+04H,A
;       LedOut[2]=Disp_Tab[LedNumVal%100/10]&0x7f;
			; SOURCE LINE # 88
	MOV  	R3,#064H
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	MOV  	R7,LedNumVal+03H
	MOV  	R6,LedNumVal+02H
	MOV  	R5,LedNumVal+01H
	MOV  	R4,LedNumVal
	LCALL	?C?ULDIV
	MOV  	R4,AR0
	MOV  	R5,AR1
	MOV  	R6,AR2
	MOV  	R7,AR3
	CLR  	A
	MOV  	R3,#0AH
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	LCALL	?C?ULDIV
	MOV  	A,#LOW (Disp_Tab)
	ADD  	A,R7
	MOV  	DPL,A
	MOV  	A,#HIGH (Disp_Tab)
	ADDC 	A,R6
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	ANL  	A,#07FH
	MOV  	R7,A
	CLR  	A
	MOV  	LedOut+0BH,R7
	MOV  	LedOut+0AH,A
	MOV  	LedOut+09H,A
	MOV  	LedOut+08H,A
;       LedOut[3]=Disp_Tab[LedNumVal%10]; 
			; SOURCE LINE # 89
	MOV  	R3,#0AH
	MOV  	R2,A
	MOV  	R1,A
	MOV  	R0,A
	MOV  	R7,LedNumVal+03H
	MOV  	R6,LedNumVal+02H
	MOV  	R5,LedNumVal+01H
	MOV  	R4,LedNumVal
	LCALL	?C?ULDIV
	MOV  	A,#LOW (Disp_Tab)
	ADD  	A,R3
	MOV  	DPL,A
	MOV  	A,#HIGH (Disp_Tab)
	ADDC 	A,R2
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	CLR  	A
	MOV  	LedOut+0FH,R7
	MOV  	LedOut+0EH,A
	MOV  	LedOut+0DH,A
	MOV  	LedOut+0CH,A
;   	  
;     for(i=0; i<4; i++) 
			; SOURCE LINE # 91
	MOV  	i?140,A
?C0012:
	MOV  	A,i?140
	CLR  	C
	SUBB 	A,#04H
	JC   	$ + 5H
	LJMP 	?C0002
; 	  {		
			; SOURCE LINE # 92
; 		
; 	    P0 =  LedOut[i];
			; SOURCE LINE # 94
	MOV  	A,i?140
	ADD  	A,ACC
	ADD  	A,ACC
	ADD  	A,#LOW (LedOut)
	MOV  	R0,A
	LCALL	?C?LLDIDATA
	MOV  	P0,R7
; 	   	
; 		switch(i)					  
			; SOURCE LINE # 96
	MOV  	A,i?140
	DEC  	A
	JZ   	?C0017
	DEC  	A
	JZ   	?C0018
	DEC  	A
	JZ   	?C0019
	DEC  	A
	JZ   	?C0020
	ADD  	A,#04H
	JNZ  	?C0015
;          {	    
			; SOURCE LINE # 97
; 			case 0:LS138A=0; LS138B=0; LS138C=0; break;         
			; SOURCE LINE # 98
?C0016:
	CLR  	LS138A
	SJMP 	?C0037
;             case 1:LS138A=1; LS138B=0; LS138C=0; break;             	
			; SOURCE LINE # 99
?C0017:
	SETB 	LS138A
?C0037:
	CLR  	LS138B
	CLR  	LS138C
	SJMP 	?C0015
;             case 2:LS138A=0; LS138B=1; LS138C=0; break; 
			; SOURCE LINE # 100
?C0018:
	CLR  	LS138A
	SJMP 	?C0038
;             case 3:LS138A=1; LS138B=1; LS138C=0; break; 
			; SOURCE LINE # 101
?C0019:
	SETB 	LS138A
?C0038:
	SETB 	LS138B
	CLR  	LS138C
	SJMP 	?C0015
; 			case 4:LS138A=0; LS138B=0; LS138C=1; break;
			; SOURCE LINE # 102
?C0020:
	CLR  	LS138A
	CLR  	LS138B
	SETB 	LS138C
;          }
			; SOURCE LINE # 103
?C0015:
; 		 
; 		delay(100);
			; SOURCE LINE # 105
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delay
; 	  }
			; SOURCE LINE # 106
	INC  	i?140
	SJMP 	?C0012
; END OF main

; 
; 	  //  LS138A=1; LS138B=1; LS138C=1;    
; 
;    }
; }
; 
; 
; void delay(unsigned int i)

	RSEG  ?PR?_delay?2402MAIN
_delay:
	USING	0
			; SOURCE LINE # 114
;---- Variable 'i?242' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 115
;     char j;
;     for(i; i > 0; i--)
			; SOURCE LINE # 117
?C0022:
	SETB 	C
	MOV  	A,R7
	SUBB 	A,#00H
	MOV  	A,R6
	SUBB 	A,#00H
	JC   	?C0028
;         for(j = 200; j > 0; j--);
			; SOURCE LINE # 118
;---- Variable 'j?243' assigned to Register 'R5' ----
	MOV  	R5,#0C8H
?C0025:
	SETB 	C
	MOV  	A,R5
	XRL  	A,#080H
	SUBB 	A,#080H
	JC   	?C0024
	DEC  	R5
	SJMP 	?C0025
?C0024:
	MOV  	A,R7
	DEC  	R7
	JNZ  	?C0022
	DEC  	R6
?C0035:
	SJMP 	?C0022
; }
			; SOURCE LINE # 119
?C0028:
	RET  	
; END OF _delay

CSEG	AT	0001BH
	LJMP	T1zd

; 
; 
; /*************************************
;  [ t1 (0.5ms)中断] 中断中做 PWM 输出
;   ------------1000/(0.02ms*250)=200Hz
; *************************************/
; void T1zd(void) interrupt 3   //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断

	RSEG  ?PR?T1zd?2402MAIN
	USING	0
T1zd:
	PUSH 	ACC
	PUSH 	PSW
	MOV  	PSW,#00H
	PUSH 	AR0
	PUSH 	AR6
	PUSH 	AR7
	USING	0
			; SOURCE LINE # 126
; {
; 	 TH1 = 0xfe; //11.0592
			; SOURCE LINE # 128
	MOV  	TH1,#0FEH
; 	 TL1 = 0x33;
			; SOURCE LINE # 129
	MOV  	TL1,#033H
;    if(USEC++==200)
			; SOURCE LINE # 130
	MOV  	R0,#LOW (USEC)
	INC  	R0
	INC  	@R0
	MOV  	A,@R0
	DEC  	R0
	MOV  	AR6,@R0
	JNZ  	?C0036
	INC  	@R0
?C0036:
	DEC  	A
	XRL  	A,#0C8H
	ORL  	A,R6
	JNZ  	?C0034
;    {	USEC=0;
			; SOURCE LINE # 131
	MOV  	R0,#LOW (USEC)
	MOV  	@R0,A
	INC  	R0
	MOV  	@R0,A
; 	 
;     if (K3) Count1++;     //改变数据
			; SOURCE LINE # 133
	JNB  	K3,?C0030
	INC  	Count1
?C0030:
;     if (K4&Count1!=0) Count1--;
			; SOURCE LINE # 134
	MOV  	C,K4
	CLR  	A
	RLC  	A
	MOV  	R7,A
	MOV  	A,Count1
	JZ   	?C0032
	MOV  	R6,#01H
	SJMP 	?C0033
?C0032:
	MOV  	R6,#00H
?C0033:
	MOV  	A,R6
	ANL  	A,R7
	JZ   	?C0034
	DEC  	Count1
;   
;     }  
			; SOURCE LINE # 136
; 
; }
			; SOURCE LINE # 138
?C0034:
	POP  	AR7
	POP  	AR6
	POP  	AR0
	POP  	PSW
	POP  	ACC
	RETI 	
; END OF T1zd

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -