📄 main.src
字号:
LCALL Display
; }
; SOURCE LINE # 141
SJMP ?C0001
; END OF main
; }
;
;
; //*******************************************************
; //* AdcStart
; //*
; //*功能描述:启动一次ADC0804采样
; //*输入参数:无
; //*返回值:无
; //*******************************************************
; void AdcStart()
RSEG ?PR?AdcStart?MAIN
AdcStart:
; SOURCE LINE # 152
; {
; SOURCE LINE # 153
; ADC_CS = 0; //片选信号置0,ADC0804有效
; SOURCE LINE # 154
CLR ADC_CS
;
; ADC_WR = 0; //WR信号为低电平有效,启动一次ADC采样
; SOURCE LINE # 156
CLR ADC_WR
; //NOP
; ADC_WR = 1; //采样启动完毕WR信号复位
; SOURCE LINE # 158
SETB ADC_WR
; //NOP
; ADC_CS = 1; //片选信号复位
; SOURCE LINE # 160
SETB ADC_CS
; }
; SOURCE LINE # 161
RET
; END OF AdcStart
;
; //*******************************************************
; //* AdcRead
; //*
; //*功能描述:完成一次采样后,从ADC0804的DB引脚读取采样值
; //*输入参数:无
; //*返回值:无
; //*******************************************************
; void AdcRead()
RSEG ?PR?AdcRead?MAIN
AdcRead:
; SOURCE LINE # 170
; {
; SOURCE LINE # 171
; ADC_CS = 0; //片选信号置0,ADC0804有效
; SOURCE LINE # 172
CLR ADC_CS
; //__NOP;
; ADC_RD = 0; //RD信号为低电平有效,读出采样结果
; SOURCE LINE # 174
CLR ADC_RD
; //NOP
; SampleValue = DB; //读出采样结果
; SOURCE LINE # 176
MOV SampleValue,P2
;
; ADC_RD = 1; //采样结果读出后,RD信号复位
; SOURCE LINE # 178
SETB ADC_RD
; //NOP
; ADC_CS = 1; //片选信号复位
; SOURCE LINE # 180
SETB ADC_CS
; }
; SOURCE LINE # 181
RET
; END OF AdcRead
;
; //*******************************************************
; //* Display
; //*
; //*功能描述:将采样结果通过八段数码管显示出来
; //*输入参数:无
; //*返回值:无
; //*******************************************************
; void Display()
RSEG ?PR?Display?MAIN
Display:
USING 0
; SOURCE LINE # 190
; {
; SOURCE LINE # 191
; uint8 CurBit,CurCode;
; uint8 VoltInt; //实际电压值的整数部分
; fp32 VoltDec; //实际电压值的小数部分
; uint8 VoltDectoInt;
; RealVoltage = VREF * (SampleValue / FULLSCALE); //将二进制字节采样结果转换成实际电压值
; SOURCE LINE # 196
MOV R6,#00H
CLR A
MOV R7,A
MOV R4,A
MOV R5,#0AH
LCALL ?C?IMUL
MOV R4,AR6
MOV R5,AR7
CLR A
LCALL ?C?FCASTI
MOV RealVoltage+03H,R7
MOV RealVoltage+02H,R6
MOV RealVoltage+01H,R5
MOV RealVoltage,R4
; VoltInt = (uint8)RealVoltage; //获得实际电压值的整数部分
; SOURCE LINE # 197
LCALL ?C?CASTF
MOV VoltInt?342,R7
; VoltDec = RealVoltage - VoltInt; //获得实际电压值的小数部分
; SOURCE LINE # 198
MOV R4,VoltInt?342
CLR A
LCALL ?C?FCASTC
MOV R0,AR4
MOV R1,AR5
MOV R2,AR6
MOV R3,AR7
MOV R7,RealVoltage+03H
MOV R6,RealVoltage+02H
MOV R5,RealVoltage+01H
MOV R4,RealVoltage
LCALL ?C?FPSUB
MOV VoltDec?343+03H,R7
MOV VoltDec?343+02H,R6
MOV VoltDec?343+01H,R5
MOV VoltDec?343,R4
; VoltDectoInt = (uint8)(VoltDec * 10000); //小数点后保留四位
; SOURCE LINE # 199
MOV R7,#00H
MOV R6,#040H
MOV R5,#01CH
MOV R4,#046H
MOV R3,VoltDec?343+03H
MOV R2,VoltDec?343+02H
MOV R1,VoltDec?343+01H
MOV R0,VoltDec?343
LCALL ?C?FPMUL
LCALL ?C?CASTF
;---- Variable 'VoltDectoInt?344' assigned to Register 'R7' ----
; //显示小数部分(四位)
; for(CurBit = 0;CurBit < 4;CurBit ++)
; SOURCE LINE # 201
;---- Variable 'CurBit?340' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0006:
; {
; SOURCE LINE # 202
; CurCode = VoltDectoInt % 10;
; SOURCE LINE # 203
MOV A,R7
MOV B,#0AH
DIV AB
MOV CurCode?341,B
; VoltDectoInt /= 10;
; SOURCE LINE # 204
MOV A,R7
MOV B,#0AH
DIV AB
MOV R7,A
; BITCHOOSE = bit_table[CurBit]; //选择当前显示的数码管
; SOURCE LINE # 205
MOV A,R6
MOV DPTR,#bit_table
MOVC A,@A+DPTR
MOV P1,A
; BITCODE = sled_table[CurCode]; //将选中的八段数码管赋予位编码
; SOURCE LINE # 206
MOV A,CurCode?341
MOV DPTR,#sled_table
MOVC A,@A+DPTR
MOV P0,A
; }
; SOURCE LINE # 207
INC R6
CJNE R6,#04H,?C0006
?C0007:
; //显示个位整数与小数点
; CurCode = VoltInt % 10; //获得显示数据编码
; SOURCE LINE # 209
MOV A,VoltInt?342
MOV B,#0AH
DIV AB
MOV CurCode?341,B
; BITCHOOSE = bit_table[5]; //选择当前显示的数码管
; SOURCE LINE # 210
MOV DPTR,#bit_table+05H
CLR A
MOVC A,@A+DPTR
MOV R7,A
MOV P1,A
; BITCODE = sled_table[CurCode]; //将选中的八段数码管赋予位编码
; SOURCE LINE # 211
MOV A,CurCode?341
MOV DPTR,#sled_table
MOVC A,@A+DPTR
MOV P0,A
; DOT = 0; //小数点位于个位整数所在的八段数码管上
; SOURCE LINE # 212
CLR DOT
; //显示十位整数
; VoltInt /= 10;
; SOURCE LINE # 214
MOV A,VoltInt?342
MOV B,#0AH
DIV AB
MOV VoltInt?342,A
; CurCode = VoltInt; //获得显示数据编码
; SOURCE LINE # 215
MOV CurCode?341,A
; BITCHOOSE = bit_table[5]; //选择当前显示的数码管
; SOURCE LINE # 216
MOV P1,R7
; BITCODE = sled_table[CurCode]; //将选中的八段数码管赋予位编码
; SOURCE LINE # 217
MOV A,CurCode?341
MOVC A,@A+DPTR
MOV P0,A
; }
; SOURCE LINE # 218
RET
; END OF Display
;
; //*******************************************************
; //* delay_ms
; //*
; //*功能描述:ms级延时函数
; //*输入参数:
; //*返回值:无
; //*******************************************************
; void delay_ms(uint32 ms)
RSEG ?PR?_delay_ms?MAIN
_delay_ms:
USING 0
; SOURCE LINE # 227
MOV ms?445+03H,R7
MOV ms?445+02H,R6
MOV ms?445+01H,R5
MOV ms?445,R4
; {
; SOURCE LINE # 228
; uint32 i, j;
; for(i = 0; i < ms; i++)
; SOURCE LINE # 230
CLR A
MOV i?446+03H,A
MOV i?446+02H,A
MOV i?446+01H,A
MOV i?446,A
?C0010:
MOV R7,ms?445+03H
MOV R6,ms?445+02H
MOV R5,ms?445+01H
MOV R4,ms?445
MOV R3,i?446+03H
MOV R2,i?446+02H
MOV R1,i?446+01H
MOV R0,i?446
CLR C
LCALL ?C?ULCMP
JNC ?C0016
; for(j = 0; j < 5000; j++);
; SOURCE LINE # 231
CLR A
MOV j?447+03H,A
MOV j?447+02H,A
MOV j?447+01H,A
MOV j?447,A
?C0013:
CLR A
MOV R7,#088H
MOV R6,#013H
MOV R5,A
MOV R4,A
MOV R3,j?447+03H
MOV R2,j?447+02H
MOV R1,j?447+01H
MOV R0,j?447
CLR C
LCALL ?C?ULCMP
JNC ?C0012
MOV A,j?447+03H
ADD A,#01H
MOV j?447+03H,A
CLR A
ADDC A,j?447+02H
MOV j?447+02H,A
CLR A
ADDC A,j?447+01H
MOV j?447+01H,A
CLR A
ADDC A,j?447
MOV j?447,A
SJMP ?C0013
?C0012:
MOV A,i?446+03H
ADD A,#01H
MOV i?446+03H,A
CLR A
ADDC A,i?446+02H
MOV i?446+02H,A
CLR A
ADDC A,i?446+01H
MOV i?446+01H,A
CLR A
ADDC A,i?446
MOV i?446,A
SJMP ?C0010
; } ; SOURCE LINE # 232
?C0016:
RET
; END OF _delay_ms
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -