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

📄 com.src

📁 使用I2C总线
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\COM.SRC generated from: COM.C
; COMPILER INVOKED BY:
;        E:\Program Files\C51\BIN\C51.EXE COM.C BROWSE DEBUG OBJECTEXTEND SRC(.\COM.SRC)

$NOMOD51

NAME	COM

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
LED	BIT	090H.2
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
PT2	BIT	0B8H.5
TR0	BIT	088H.4
RS1	BIT	0D0H.4
TR1	BIT	088H.6
SDA	BIT	090H.1
TR2	BIT	0C8H.2
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
DPL	DATA	082H
SCL	BIT	090H.0
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?initial?COM      SEGMENT CODE 
?PR?main?COM         SEGMENT CODE 
?PR?vGet_Send?COM    SEGMENT CODE 
?DT?vGet_Send?COM    SEGMENT DATA OVERLAYABLE 
?PR?send?COM         SEGMENT CODE 
?PR?serial?COM       SEGMENT CODE 
?PR?_delay?COM       SEGMENT CODE 
?PR?Start_I2c?COM    SEGMENT CODE 
?PR?Stop_I2c?COM     SEGMENT CODE 
?PR?_SendB?COM       SEGMENT CODE 
?PR?RcvB?COM         SEGMENT CODE 
?PR?Ack_I2c?COM      SEGMENT CODE 
?BI?Ack_I2c?COM      SEGMENT BIT OVERLAYABLE 
?DT?COM              SEGMENT DATA 
?BI?COM              SEGMENT BIT 
	EXTRN	CODE (?C_STARTUP)
	PUBLIC	buffer
	PUBLIC	sbuffer
	PUBLIC	i
	PUBLIC	receive
	PUBLIC	sendFINS
	PUBLIC	copyOK
	PUBLIC	cmd_numb
	PUBLIC	re_finish
	PUBLIC	number?
	PUBLIC	?Ack_I2c?BIT
	PUBLIC	Ack_I2c
	PUBLIC	RcvB
	PUBLIC	_SendB
	PUBLIC	Stop_I2c
	PUBLIC	Start_I2c
	PUBLIC	_delay
	PUBLIC	serial
	PUBLIC	send
	PUBLIC	vGet_Send
	PUBLIC	main
	PUBLIC	initial

	RSEG  ?DT?vGet_Send?COM
?vGet_Send?BYTE:
          i?241:   DS   1

	RSEG  ?BI?Ack_I2c?COM
?Ack_I2c?BIT:
         a?1049:   DBIT   1

	RSEG  ?DT?COM
        number?:   DS   1
       cmd_numb:   DS   1
         copyOK:   DS   1
       sendFINS:   DS   1
              i:   DS   1
        sbuffer:   DS   1
         buffer:   DS   8

	RSEG  ?BI?COM
      re_finish:   DBIT   1
        receive:   DBIT   1
; 
; /*****************************************************************/ 
; /*                                                               */                                                                
; /*名称:                   24C02读写程序                         */                                                                                                                                                                           
; /*功能:           接收串口发来的数据,写到24C02里面             */
; /*                 再从24C02里读出刚写进的数据,由串口发出       */                               
; /*难度等级:                   高                                */                                                                     
; /* 作者:                  zengrenliang                          */
; /* 版权:           http://www.51kaifa.com                       */
; /*编写日期:        2006.05.21                                   */                                                                                                                                                                                                             
; /*****************************************************************/
; 
; #include <reg52.h>
; #define uchar  unsigned char
; #define uint unsigned int
; sbit SCL=P1^0;//I2C时钟线
; sbit SDA=P1^1;//I2C数据线
; 
; bit receive;//接收标志
; bit re_finish;//接收一串字符完成标志
; sbit LED = P1^2;//LED指示灯
; 
; uchar  i,buffer[8];//串口缓冲区
; uchar  sbuffer,number;//发送字符个数
; uchar  sendFINS ;//发送完成标志
; uchar  copyOK , cmd_numb ;//发送缓冲区填充完成
; 
; extern void Start_I2c();
; extern void Stop_I2c();
; extern uchar RcvB();
; void   send(void);
; void   vGet_Send(void);
; extern void Ack_I2c(bit a);
; extern void SendB(uchar c);
; extern void  delay(unsigned int loop);
; 
; /*******************************系统初始化***********************/
; void initial()

	RSEG  ?PR?initial?COM
initial:
	USING	0
			; SOURCE LINE # 38
; {  unsigned char j;
			; SOURCE LINE # 39
;   
;    SCON=0x50;           //串口工作方式1,允许接收
			; SOURCE LINE # 41
	MOV  	SCON,#050H
;    PCON=0x80;           //波特率翻倍
			; SOURCE LINE # 42
	MOV  	PCON,#080H
;    TCON=0;              
			; SOURCE LINE # 43
	CLR  	A
	MOV  	TCON,A
;    TMOD=0x26;           //T1用于串口波特率控制
			; SOURCE LINE # 44
	MOV  	TMOD,#026H
;    TL1=0xfa;            //初始化T1,波特率为9600(晶振11.0592M)
			; SOURCE LINE # 45
	MOV  	TL1,#0FAH
;    TH1=0xfa;                    
			; SOURCE LINE # 46
	MOV  	TH1,#0FAH
;    TR1=1;               //开定时器
			; SOURCE LINE # 47
	SETB 	TR1
;    EA=1;                //开总中断
			; SOURCE LINE # 48
	SETB 	EA
;    ES=1;                //开串口中断
			; SOURCE LINE # 49
	SETB 	ES
;    copyOK = 0;         //缓冲区准备好标志清零
			; SOURCE LINE # 50
	MOV  	copyOK,A
;    receive = 0;        //接收标志清零
			; SOURCE LINE # 51
	CLR  	receive
;    re_finish = 0;      //接受完成标志清零
			; SOURCE LINE # 52
	CLR  	re_finish
;    cmd_numb = 0;       //接受计数器清零
			; SOURCE LINE # 53
	MOV  	cmd_numb,A
; 
;   for(j=0; j<8; j++)   //串口缓冲区清空
			; SOURCE LINE # 55
;---- Variable 'j?040' assigned to Register 'R7' ----
	MOV  	R7,A
?C0001:
;       buffer[i] = 0xff;  //table[18]为空显示    
			; SOURCE LINE # 56
	MOV  	A,#LOW (buffer)
	ADD  	A,i
	MOV  	R0,A
	MOV  	@R0,#0FFH
	INC  	R7
	CJNE 	R7,#08H,?C0001
;  }                        
			; SOURCE LINE # 57
?C0004:
	RET  	
; END OF initial

; 
; /******************************主函数**************************/
; 
; main()

	RSEG  ?PR?main?COM
main:
	USING	0
			; SOURCE LINE # 61
; { 
			; SOURCE LINE # 62
;   initial();
			; SOURCE LINE # 63
	LCALL	initial
?C0005:
;   while(1){
			; SOURCE LINE # 64
;     if(re_finish){//接收一串字符完成
			; SOURCE LINE # 65
	JNB  	re_finish,?C0005
;       re_finish = 0;  
			; SOURCE LINE # 66
	CLR  	re_finish
;       vGet_Send(); 
			; SOURCE LINE # 67
	LCALL	vGet_Send
;        }
			; SOURCE LINE # 68
;     }
			; SOURCE LINE # 69
	SJMP 	?C0005
; END OF main

;  }
; 
; /*****************************保存和串口发送**************************/
; void  vGet_Send(void)

	RSEG  ?PR?vGet_Send?COM
vGet_Send:
	USING	0
			; SOURCE LINE # 73
; { uchar i;       
			; SOURCE LINE # 74
;    
;    Start_I2c();
			; SOURCE LINE # 76
	LCALL	Start_I2c
;    SendB(0xa0);
			; SOURCE LINE # 77
	MOV  	R7,#0A0H
	LCALL	_SendB
;    SendB(0x10);           //数据存放初始地址为0x06
			; SOURCE LINE # 78
	MOV  	R7,#010H
	LCALL	_SendB
;    for(i=0;i<6;i++)
			; SOURCE LINE # 79
	CLR  	A
	MOV  	i?241,A
?C0009:
;      {SendB(buffer[i]); //向24C02写6个数据
			; SOURCE LINE # 80
	MOV  	A,#LOW (buffer)
	ADD  	A,i?241
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	R7,A
	LCALL	_SendB
;       delay(2); }
			; SOURCE LINE # 81
	MOV  	R7,#02H
	MOV  	R6,#00H
	LCALL	_delay
	INC  	i?241
	MOV  	A,i?241
	CLR  	C
	SUBB 	A,#06H
	JC   	?C0009
?C0010:
;    Stop_I2c();
			; SOURCE LINE # 82
	LCALL	Stop_I2c
; 
;    delay(1000);  
			; SOURCE LINE # 84
	MOV  	R7,#0E8H
	MOV  	R6,#03H
	LCALL	_delay
; 
;    for(i=0;i<8;i++)
			; SOURCE LINE # 86
	CLR  	A
	MOV  	i?241,A
?C0012:
;       buffer[i] = 0xff; //用0xff填充发送缓冲区
			; SOURCE LINE # 87
	MOV  	A,#LOW (buffer)
	ADD  	A,i?241
	MOV  	R0,A
	MOV  	@R0,#0FFH
	INC  	i?241
	MOV  	A,i?241
	CJNE 	A,#08H,?C0012
?C0013:
; 
;    for(i=0;i<6;i++){
			; SOURCE LINE # 89
	CLR  	A
	MOV  	i?241,A
?C0015:
;      Start_I2c();  
			; SOURCE LINE # 90
	LCALL	Start_I2c
;      SendB(0xa0);        //从24C02读取刚才写入的数据
			; SOURCE LINE # 91
	MOV  	R7,#0A0H
	LCALL	_SendB
;      SendB(0x10+i);         //数据存放地址为0x06+i
			; SOURCE LINE # 92
	MOV  	A,i?241
	ADD  	A,#010H
	MOV  	R7,A
	LCALL	_SendB
;      Start_I2c();        
			; SOURCE LINE # 93
	LCALL	Start_I2c
;      SendB(0xa1);           
			; SOURCE LINE # 94
	MOV  	R7,#0A1H
	LCALL	_SendB
;      buffer[i]=RcvB();   //读取的值送串口缓冲区
			; SOURCE LINE # 95
	LCALL	RcvB
	MOV  	A,#LOW (buffer)
	ADD  	A,i?241
	MOV  	R0,A
	MOV  	@R0,AR7
;      Ack_I2c(1);     
			; SOURCE LINE # 96
	SETB 	?Ack_I2c?BIT
	LCALL	Ack_I2c
;      Stop_I2c();
			; SOURCE LINE # 97
	LCALL	Stop_I2c
;      } 
			; SOURCE LINE # 98
	INC  	i?241
	MOV  	A,i?241
	CLR  	C
	SUBB 	A,#06H
	JC   	?C0015
?C0016:
;    copyOK = 1;           //置准备好标志
			; SOURCE LINE # 99
	MOV  	copyOK,#01H
;    send();               //向串口发送
			; SOURCE LINE # 100
	LJMP 	send
; END OF vGet_Send

; }
; 
; /*****************************串口发送***************************/
; 
; void  send(void)//向串口发送字符串

	RSEG  ?PR?send?COM
send:
	USING	0
			; SOURCE LINE # 105
;  { 
			; SOURCE LINE # 106
;    
;    if(copyOK)  //串口准备好且缓冲区准备好
			; SOURCE LINE # 108
	MOV  	A,copyOK
	JZ   	?C0021
;     { 
			; SOURCE LINE # 109
;      i = 0;                 
			; SOURCE LINE # 110
	CLR  	A
	MOV  	i,A
;      REN = 0;               //发送过程中禁止接收数据
			; SOURCE LINE # 111
	CLR  	REN
;      copyOK = 0;            //清缓冲区准备好标志
			; SOURCE LINE # 112
	MOV  	copyOK,A
;      SBUF = buffer[i++];      //发送字符串首字符
			; SOURCE LINE # 113
	MOV  	R7,i
	INC  	i
	MOV  	A,#LOW (buffer)
	ADD  	A,R7
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	SBUF,A
;      number = 7;            //置发送计数器
			; SOURCE LINE # 114
	MOV  	number?,#07H
;       }
			; SOURCE LINE # 115
;    else
;        return;              //没准备好则返回
;   }
			; SOURCE LINE # 118
?C0021:
	RET  	
; END OF send

CSEG	AT	00023H
	LJMP	serial

; 
; 
; /***************************串口中断响应*************************/
; 

⌨️ 快捷键说明

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