📄 main.s
字号:
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 121
; char temp ; //循环变量
; unsigned int data,vdata ; //温度和电压的值
; /******************************************************************************
; 端口初始化和晶体频率校正
; ******************************************************************************/
;
;
; port_init() ; //端口初始话~~~!
xcall _port_init
.dbline 122
; OSCCAL=0xb0 ;
ldi R24,176
out 0x31,R24
.dbline 128
;
; /*------------------------------------------------------------------
; 初始化完成,初始化温度计,初始化液晶
; --------------------------------------------------------------------*/
;
; resetDS18B20() ; //初始化温度计
xcall _resetDS18B20
.dbline 129
; DDRA|=LCD_DATA ; // 数据为输出
in R24,0x1a
ori R24,240
out 0x1a,R24
.dbline 130
; DDRC|=LCD_RS|LCD_EN ; //置位RS.EN
in R24,0x14
ori R24,192
out 0x14,R24
.dbline 131
; LCD_init() ; //液晶初始化
xcall _LCD_init
.dbline 138
;
; /*****************************************************************************
; 初始化串口
; ******************************************************************************/
; // UBRR=0x33; ; //波特率9600
; // UCR=0x18 ; //设置串口接收发送有效
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 139
; UCSRA = 0x00;
out 0xb,R2
.dbline 140
; UCSRC = BIT(URSEL) | 0x06;
ldi R24,134
out 0x20,R24
.dbline 141
; UBRRL = baud; //set baud rate lo
ldi R24,51
out 0x9,R24
.dbline 142
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 143
; UCSRB = 0x98;
ldi R24,152
out 0xa,R24
.dbline 149
;
; /****************************************************************************
; 初始化ad口
; 使用内部基准2.56 v , 使用 pa1(ad1)口采集电压,并发送到串口
; *****************************************************************************/
; BIT_CLR(DDRA,1);
cbi 0x1a,1
.dbline 150
; BIT_CLR(PORTA,1);//设置采集端口为高祖状态
cbi 0x1b,1
.dbline 151
; SEI();
sei
xjmp L23
L22:
.dbline 159
;
; /******************************************************************************
; 主循环体,循环测温,电压,并发送到上位机
; ******************************************************************************/
;
; while(1)
;
; {
.dbline 160
; resetDS18B20() ;
xcall _resetDS18B20
.dbline 161
; m=readTempDS18B20() ; //测试终端温度
xcall _readTempDS18B20
movw R2,R16
clr R4
clr R5
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
.dbline 163
;
; data=m;
movw R30,R28
ldd R12,z+0
ldd R13,z+1
.dbline 164
; vdata = ad_1() ; //测试终端工作电压
xcall _ad_1
movw R10,R16
.dbline 165
; puts(data) ;
movw R16,R12
xcall _puts
.dbline 166
; puts(vdata) ; //发送电压和温度到上位机
movw R16,R10
xcall _puts
.dbline 167
; if(start==1) display() ; // 普通模式
lds R24,_start
cpi R24,1
brne L25
.dbline 167
xcall _display
xjmp L26
L25:
.dbline 168
; else if(clr==1)
lds R24,_clr
cpi R24,1
brne L27
.dbline 169
; {
.dbline 170
; LCD_write_char(0x01,0);
clr R18
clr R19
ldi R16,1
ldi R17,0
xcall _LCD_write_char
.dbline 171
; clr=0;
clr R2
sts _clr,R2
.dbline 172
; one=0;
sts _one,R2
.dbline 173
; two=0;
sts _two,R2
.dbline 174
; start=0;
sts _start,R2
.dbline 175
; end=0;
sts _end,R2
.dbline 176
; }
xjmp L28
L27:
.dbline 178
; else
; delay_nms(1000) ;
ldi R16,1000
ldi R17,3
xcall _delay_nms
L28:
L26:
.dbline 180
L23:
.dbline 157
xjmp L22
X1:
.dbline -2
L21:
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l temp 1 c
.dbsym r vdata 10 i
.dbsym r data 12 i
.dbsym l m 0 l
.dbend
.dbfunc e puts _puts fV
; l -> R20
; h -> R20
; data -> y+2
.even
_puts::
st -y,r17
st -y,r16
xcall push_gset1
.dbline -1
.dbline 185
;
; }//主循环结束
; }//主程序结束
;
;
; void puts(unsigned int data )
; {
.dbline 188
; // UDR=data>>8;
; unsigned char h , l ;
; h=*((unsigned char *)(&data)+1);
ldd R20,y+3
.dbline 189
; UDR=h;
out 0xc,R20
L31:
.dbline 190
L32:
.dbline 190
; while(!(USR&0x40));
sbis 0xb,6
rjmp L31
.dbline 191
; USR |= 0x40;
sbi 0xb,6
.dbline 193
; //UDR=data;
; l=*(unsigned char *)(&data);
movw R30,R28
ldd R20,z+2
.dbline 194
; UDR=l;
out 0xc,R20
L34:
.dbline 195
L35:
.dbline 195
; while(!(USR&0x40));
sbis 0xb,6
rjmp L34
.dbline 196
; USR |= 0x40;
sbi 0xb,6
.dbline -2
L29:
xcall pop_gset1
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r l 20 c
.dbsym r h 20 c
.dbsym l data 2 i
.dbend
.dbfunc e display _display fV
; k -> R20
.even
_display::
xcall push_gset1
.dbline -1
.dbline 201
;
; }
;
; void display(void)
; {
.dbline 203
; unsigned char k ;
; if(one==1)
lds R24,_one
cpi R24,1
brne L38
.dbline 204
; {
.dbline 205
; LCD_set_xy(0,0);
clr R18
clr R16
xcall _LCD_set_xy
.dbline 206
; for(k=1;k<=end;k++)
ldi R20,1
xjmp L43
L40:
.dbline 207
.dbline 208
ldi R24,<_string
ldi R25,>_string
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R18,z+0
clr R19
clr R16
clr R17
xcall _LCD_write_char
.dbline 210
L41:
.dbline 206
inc R20
L43:
.dbline 206
lds R2,_end
cp R2,R20
brsh L40
.dbline 211
; {
; LCD_write_char(0,string[k]);
;
; }
; start=0;
clr R2
sts _start,R2
.dbline 212
; i=0;
sts _i,R2
.dbline 213
; }
xjmp L39
L38:
.dbline 214
; else if(two==1)
lds R24,_two
cpi R24,1
brne L44
.dbline 215
; {
.dbline 216
; LCD_set_xy(0,1);
ldi R18,1
clr R16
xcall _LCD_set_xy
.dbline 217
; for(k=1;k<=end;k++)
ldi R20,1
xjmp L49
L46:
.dbline 218
.dbline 219
ldi R24,<_string
ldi R25,>_string
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R18,z+0
clr R19
clr R16
clr R17
xcall _LCD_write_char
.dbline 221
L47:
.dbline 217
inc R20
L49:
.dbline 217
lds R2,_end
cp R2,R20
brsh L46
.dbline 222
; {
; LCD_write_char(0,string[k]);
;
; }
; start = 0 ;
clr R2
sts _start,R2
.dbline 223
; i= 0;
sts _i,R2
.dbline 224
; }
L44:
L39:
.dbline -2
L37:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r k 20 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\我的设计\delphi\uartdispy\mcu\main.c
_string::
.blkb 18
.dbsym e string _string A[18:18]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -