📄 main_sub.src
字号:
; main_sub.SRC generated from: main_sub.c
; COMPILER INVOKED BY:
; C:\Program Files\Keil\C51\BIN\C51.EXE main_sub.c BROWSE DEBUG OBJECTEXTEND TABS(6)
$NOMOD51
NAME MAIN_SUB
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
rst_rf BIT 0B0H.3
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
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
led BIT 090H.2
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.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
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?_delay_time?MAIN_SUB SEGMENT CODE
?PR?delay_time_1s?MAIN_SUB SEGMENT CODE
?DT?delay_time_1s?MAIN_SUB SEGMENT DATA OVERLAYABLE
?PR?timer0?MAIN_SUB SEGMENT CODE
?PR?serial_isr?MAIN_SUB SEGMENT CODE
?PR?send_ack?MAIN_SUB SEGMENT CODE
?PR?_receive_cmd?MAIN_SUB SEGMENT CODE
?DT?_receive_cmd?MAIN_SUB SEGMENT DATA OVERLAYABLE
?PR?send_tmp_pc?MAIN_SUB SEGMENT CODE
?DT?send_tmp_pc?MAIN_SUB SEGMENT DATA OVERLAYABLE
?PR?_receive_ack?MAIN_SUB SEGMENT CODE
?DT?_receive_ack?MAIN_SUB SEGMENT DATA OVERLAYABLE
?PR?send_data_pc?MAIN_SUB SEGMENT CODE
?PR?do_pc_cmd?MAIN_SUB SEGMENT CODE
?PR?main?MAIN_SUB SEGMENT CODE
?C_INITSEG SEGMENT CODE
?CO?MAIN_SUB SEGMENT CODE
?BI?MAIN_SUB SEGMENT BIT
?DT?MAIN_SUB SEGMENT DATA
EXTRN CODE (configure_ds)
EXTRN CODE (send_syn_pc)
EXTRN CODE (_OWCrc)
EXTRN CODE (collect_ds_tmp)
EXTRN CODE (_send_byte_pc)
EXTRN CODE (error_set)
EXTRN CODE (_send_nbyt_pc)
EXTRN CODE (_send_pbyt_pc)
EXTRN CODE (_rdadr)
EXTRN DATA (?_rdadr?BYTE)
EXTRN CODE (_rdnbyt)
EXTRN DATA (?_rdnbyt?BYTE)
EXTRN CODE (send_end_pc)
EXTRN CODE (send_ds_cmd)
EXTRN CODE (change_time)
EXTRN CODE (?C?CLDOPTR)
EXTRN CODE (?C?CLDPTR)
EXTRN CODE (?C?COPY)
EXTRN CODE (?C_STARTUP)
PUBLIC pc_cmd_data
PUBLIC receive_data
PUBLIC command
PUBLIC t1_count1
PUBLIC t1_count0
PUBLIC byt_count
PUBLIC t1_data1
PUBLIC t1_data0
PUBLIC collect_tmp_flg
PUBLIC receive_en
PUBLIC index_rom
PUBLIC main
PUBLIC do_pc_cmd
PUBLIC send_data_pc
PUBLIC _receive_ack
PUBLIC send_tmp_pc
PUBLIC _receive_cmd
PUBLIC send_ack
PUBLIC serial_isr
PUBLIC timer0
PUBLIC delay_time_1s
PUBLIC _delay_time
RSEG ?DT?send_tmp_pc?MAIN_SUB
?send_tmp_pc?BYTE:
i?648: DS 1
k?649: DS 1
crc_result?650: DS 1
id_count?651: DS 1
sla_adr?652: DS 1
init_adr?653: DS 1
tmp_data?654: DS 8
RSEG ?DT?delay_time_1s?MAIN_SUB
?delay_time_1s?BYTE:
i?142: DS 1
RSEG ?DT?_receive_ack?MAIN_SUB
?_receive_ack?BYTE:
us?755: DS 3
ORG 3
data_tmp?757: DS 2
RSEG ?DT?_receive_cmd?MAIN_SUB
?_receive_cmd?BYTE:
us?543: DS 3
ORG 3
i?544: DS 1
k?545: DS 1
data_tmp?546: DS 8
crc_result?547: DS 1
RSEG ?BI?MAIN_SUB
receive_en: DBIT 1
collect_tmp_flg: DBIT 1
RSEG ?DT?MAIN_SUB
t1_data0: DS 2
t1_data1: DS 2
byt_count: DS 1
t1_count0: DS 2
t1_count1: DS 2
command: DS 1
receive_data: DS 16
pc_cmd_data: DS 4
RSEG ?CO?MAIN_SUB
index_rom:
DB 001H
DB 001H
_?ix1000:
DB 000H
DB 000H
RSEG ?C_INITSEG
DB 001H
DB byt_count
DB 000H
DB 0C1H, collect_tmp_flg + 000H ; bit-init
DB 0C1H, receive_en + 080H ; bit-init
DB 002H
DB t1_count0
DW 00384H
DB 002H
DB t1_count1
DW 00050H
DB 002H
DB t1_data0
DW 00384H
DB 002H
DB t1_data1
DW 00050H
; #pragma src
; ///////////////////////////////////////////////
; //EEPROM存储区安排:
; //0000H~01FFH 512byte DS18B20 ID
; //0200H~027FH 128byte 温度数据
; //0280H~03FFH 384byte 配置参数<温度报警上下限值,温度转换精度>
; #include<reg51.h>
; #include<intrins.h>
; #include<rount3.h>
; #include<rount5.h>
; #include<rount6.h>
;
; #define collect 67 //C ASCII 码为67
; #define transmit 84
; #define init 73
; #define shedule 83
; #define dat 68
; #define ack 65
;
; sbit led =0x92;
; sbit rst_rf =0xb3;
;
; // GLOBAL VARIABLES
; unsigned char data receive_data[16]; //串行通信变量,设为全局变量确保快速响应
; unsigned char data command;
; unsigned char byt_count =0; //串行中断接收字节计数
;
; bit data collect_tmp_flg =0; //是否开始温度采集标志
; bit data receive_en =1; //命令是否处理标志
;
; unsigned int data t1_count0 =900; //定时间隔参数
; unsigned int data t1_count1 =80;
; //PC命令修改下列两个参数值,可以改变温度采样时间间隔
; unsigned int data t1_data0 =900;
; unsigned int data t1_data1 =80;
;
; ////////////////////////////
; //名称:延迟程序
; //功能:根据参数延迟
; ////////////////////////////
; void delay_time(unsigned int us) //29us/40us/52us/64us
RSEG ?PR?_delay_time?MAIN_SUB
_delay_time:
USING 0
; SOURCE LINE # 41
;---- Variable 'us?040' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 42
; unsigned int data i;
; for(i=0;i<=us;i++)
; SOURCE LINE # 44
;---- Variable 'i?041' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0001:
SETB C
MOV A,R5
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0004
; _nop_();
; SOURCE LINE # 45
NOP
INC R5
CJNE R5,#00H,?C0088
INC R4
?C0088:
SJMP ?C0001
; }
; SOURCE LINE # 46
?C0004:
RET
; END OF _delay_time
;
; void delay_time_1s (void) //实际模拟仿真测试 /0.9s
RSEG ?PR?delay_time_1s?MAIN_SUB
delay_time_1s:
USING 0
; SOURCE LINE # 48
; {
; SOURCE LINE # 49
?C0005:
; unsigned char data i;
; while(i<4)
; SOURCE LINE # 51
MOV A,i?142
CLR C
SUBB A,#04H
JNC ?C0007
; {
; SOURCE LINE # 52
; delay_time(8000);
; SOURCE LINE # 53
MOV R7,#040H
MOV R6,#01FH
LCALL _delay_time
; _nop_();
; SOURCE LINE # 54
NOP
; delay_time(8000);
; SOURCE LINE # 55
LCALL _delay_time
; i++;
; SOURCE LINE # 56
INC i?142
; }
; SOURCE LINE # 57
SJMP ?C0005
; }
; SOURCE LINE # 58
?C0007:
RET
; END OF delay_time_1s
CSEG AT 0000BH
LJMP timer0
;
;
; //////////////////////////////
; //名称:定时器0 ISR
; //功能:DS18B20定时温度采集,存储
; //////////////////////////////
; void timer0(void) interrupt 1 using 3
RSEG ?PR?timer0?MAIN_SUB
USING 3
timer0:
PUSH ACC
; SOURCE LINE # 65
; {
; ET0 =0;
; SOURCE LINE # 67
CLR ET0
; TH0 =0x4C;
; SOURCE LINE # 68
MOV TH0,#04CH
; TL0 =0x00;
; SOURCE LINE # 69
MOV TL0,#00H
; if( (--t1_count0)==0 )
; SOURCE LINE # 70
MOV A,t1_count0+01H
DEC t1_count0+01H
JNZ ?C0089
DEC t1_count0
?C0089:
DEC A
ORL A,t1_count0
JNZ ?C0008
; {
; SOURCE LINE # 71
; if( (--t1_count1)==0 )
; SOURCE LINE # 72
MOV A,t1_count1+01H
DEC t1_count1+01H
JNZ ?C0090
DEC t1_count1
?C0090:
DEC A
ORL A,t1_count1
JNZ ?C0009
; {
; SOURCE LINE # 73
; // collect_ds_tmp(); //此处可以调用温度采集程序<必须为再入函数>
; if(collect_tmp_flg==1) //设置开始温度采集标志
; SOURCE LINE # 75
JNB collect_tmp_flg,?C0010
; _nop_();
; SOURCE LINE # 76
NOP
SJMP ?C0011
?C0010:
; else
; collect_tmp_flg =1;
; SOURCE LINE # 78
SETB collect_tmp_flg
?C0011:
;
; t1_count1 =t1_data1;
; SOURCE LINE # 80
MOV t1_count1,t1_data1
MOV t1_count1+01H,t1_data1+01H
; }
; SOURCE LINE # 81
?C0009:
; t1_count0 =t1_data0;
; SOURCE LINE # 82
MOV t1_count0,t1_data0
MOV t1_count0+01H,t1_data0+01H
; }
; SOURCE LINE # 83
?C0008:
; TF0 =0;
; SOURCE LINE # 84
CLR TF0
; ET0 =1;
; SOURCE LINE # 85
SETB ET0
; EA =1; //(十进制,两位整数,两位小数,
; SOURCE LINE # 86
SETB EA
; } //小数在低地址),存入EEPROM
; SOURCE LINE # 87
POP ACC
RETI
; END OF timer0
CSEG AT 00023H
LJMP serial_isr
;
; /////////////////////////////
; //名称:串口 ISR
; //功能:接收PC主机命令
; ////////////////////////////
; void serial_isr(void) interrupt 4
RSEG ?PR?serial_isr?MAIN_SUB
USING 0
serial_isr:
PUSH ACC
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR7
USING 0
; SOURCE LINE # 93
; {
; if(TI==1)
; SOURCE LINE # 95
JNB TI,?C0013
; TI =0;
; SOURCE LINE # 96
CLR TI
SJMP ?C0018
?C0013:
; else if(RI==1&&(receive_en==1))
; SOURCE LINE # 97
JNB RI,?C0015
JNB receive_en,?C0015
; {
; SOURCE LINE # 98
; RI =0;
; SOURCE LINE # 99
CLR RI
; receive_data[byt_count++]=SBUF;
; SOURCE LINE # 100
MOV R7,byt_count
INC byt_count
MOV A,#LOW (receive_data)
ADD A,R7
MOV R0,A
MOV @R0,SBUF
; if(byt_count>16)
; SOURCE LINE # 101
MOV A,byt_count
SETB C
SUBB A,#010H
JC ?C0018
; {
; SOURCE LINE # 102
; byt_count =0;
; SOURCE LINE # 103
MOV byt_count,#00H
; receive_en =0;
; SOURCE LINE # 104
CLR receive_en
; }
; SOURCE LINE # 105
; }
; SOURCE LINE # 106
SJMP ?C0018
?C0015:
; else
; RI =0;
; SOURCE LINE # 108
CLR RI
; }
; SOURCE LINE # 109
?C0018:
POP AR7
POP AR0
POP PSW
POP ACC
RETI
; END OF serial_isr
;
; ///////////////////////////////////////////////////////
; //名称:测试程序
; //功能:检测配置DS18B20是否成功
; /////////////////////////////////////////////////////
; /*
; void verify_config(void)
; {
; bit data flag;
; bit data page_ch_flg;
; unsigned char i,j;
; unsigned char id_count =0;
; unsigned char init_adr0,sla_adr;
; unsigned char config_data[9];
; unsigned char id_rom[8];
;
; i =0;
; j =0;
; sla_adr =0xA0; //DS18B20 ID在EEPROM中存放首地址
; init_adr0 =0x00;
; id_count =0;
; page_ch_flg =0;
;
; flag =OWReset();
; if(!flag)
; {
; do
; {
; if(page_ch_flg==1)
; {
; sla_adr =0xA2;
; rdnbyt(&id_rom[0],sla_adr,8);
; goto next;
; }
; if(id_count==0xf8)
; page_ch_flg =1;
;
; if(j==0)
; rdadr(&id_rom[0],sla_adr,init_adr0,8);
; else
; rdnbyt(&id_rom[0],sla_adr,8);
;
; next: id_count+=8;
; OWReset();
; OWWriteByte(0x55); //发匹配ID命令
; for(i=0;i<8;i++)
; {
; OWWriteByte(id_rom[i]);
; }
; OWWriteByte(0xBE); //送出Read ScatchPad命令
; for(i=0;i<9;i++)
; {
; config_data[i] =OWReadByte();
; }
;
; j++;
; }while(!OWReset()&&(j<64) ); // 读取64个DS18B20 ID
; }
; _nop_();
; }
; */
;
; ////////////////////////////////////////////////////////////
; //名称:确认信号帧回复
; //功能:接收到正确的PC命令帧,回复确认信号帧
; ///////////////////////////////////////////////////////////
; unsigned char code index_rom[2] ={0x01,0x01}; //仓库号,列号
;
; void send_ack(void)
RSEG ?PR?send_ack?MAIN_SUB
send_ack:
USING 0
; SOURCE LINE # 178
; {
; SOURCE LINE # 179
; ES =0;
; SOURCE LINE # 180
CLR ES
; send_syn_pc();
; SOURCE LINE # 181
LCALL send_syn_pc
; send_byte_pc(65); //发送标识符A<ASCII>
; SOURCE LINE # 182
MOV R7,#041H
LCALL _send_byte_pc
; send_pbyt_pc(&index_rom[0]);
; SOURCE LINE # 183
MOV R6,#HIGH (index_rom)
MOV R7,#LOW (index_rom)
LCALL _send_pbyt_pc
; send_end_pc();
; SOURCE LINE # 184
LCALL send_end_pc
; ES =1;
; SOURCE LINE # 185
SETB ES
; }
; SOURCE LINE # 186
RET
; END OF send_ack
;
; ////////////////////////////////////////////
; //名称:串口查询方式接收程序
; //功能:中断后,关中断使能,以查询方式接收PC命令字节,
; // 并对命令进行解析,返回命令值
; /////////////////////////////////////////////
; unsigned char pc_cmd_data[4];
; #define identity 1
; #define columne 1
;
; unsigned char receive_cmd(us)
RSEG ?PR?_receive_cmd?MAIN_SUB
_receive_cmd:
USING 0
; SOURCE LINE # 197
MOV us?543,R3
MOV us?543+01H,R2
MOV us?543+02H,R1
; unsigned char *us;
; SOURCE LINE # 198
; {
; unsigned char i,k;
; unsigned char data_tmp[8];
; unsigned char crc_result;
; //data_tmp[0] =*(us+1);
; //unsigned char data_chk[15]={0xff,0x55,0x55,0xFF,0xAA,0x01,0x01,84}; //为观察指针变量引入测试变量
; //unsigned char data *us=&data_chk[0];
;
; for(i=0;i<16;)
; SOURCE LINE # 207
CLR A
MOV i?544,A
?C0020:
; {
; SOURCE LINE # 208
; // data_tmp[0] =*us; //set for test varibles
; // data_tmp[1] =*(us+1);
; if( (*(us+i)==0xFF)&&( *(us+i+1)==0xAA )&&(*(us+i+2)==0x44) ) //识别帧同步字节
; SOURCE LINE # 211
MOV R3,us?543
MOV R2,us?543+01H
MOV R1,us?543+02H
MOV DPL,i?544
MOV DPH,#00H
LCALL ?C?CLDOPTR
CPL A
JNZ ?C0022
MOV R6,A
MOV A,R1
ADD A,i?544
MOV R1,A
MOV A,R6
ADDC A,R2
MOV R2,A
MOV DPTR,#01H
LCALL ?C?CLDOPTR
XRL A,#0AAH
JNZ ?C0022
MOV DPTR,#02H
LCALL ?C?CLDOPTR
XRL A,#044H
JNZ ?C0022
; {
; SOURCE LINE # 212
; for(k=0;k<8;k++)
; SOURCE LINE # 213
MOV k?545,A
?C0023:
; {
; SOURCE LINE # 214
; data_tmp[k] =*(us+i+3+k); // 此处采用for语句得不到正确值?
; SOURCE LINE # 215
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -