📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\桌面\ds18b20\main.c
.dbfunc e USART_Init _USART_Init fV
; tmp -> R10,R11
; baud -> R10,R11
.even
_USART_Init::
xcall push_gset3
movw R10,R16
.dbline -1
.dbline 20
; /****************************************Copyright (c)**************************************************
; ** 杭 州 鑫 高 科 技 有 限 公 司
; ** 开 发 部
; ** http://www.hzxingao.com
; ** 文 件 名: main.c
; ** 最后修改日期: 2005年05月11日
; ** 描 述:
; ** 版 本: V1.0
; ** 主 控 芯 片:M16 晶振频率:7.3728MHZ, 波特率19200
; **********************************************************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #include "define.h"
; #include "function.h"
; #include "para.h"
;
; #define F_CPU 7372800
;
; void USART_Init( unsigned int baud )
; {
.dbline 23
; unsigned int tmp;
; /* 设置波特率*/
; tmp= F_CPU/baud/16-1;
movw R2,R10
clr R4
clr R5
ldi R20,0
ldi R21,128
ldi R22,112
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall div32s
ldi R20,16
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32s
movw R2,R16
movw R4,R18
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
movw R10,R2
.dbline 24
; UBRRH = (unsigned char)(tmp>>8);
mov R2,R3
clr R3
out 0x20,R2
.dbline 25
; UBRRL = (unsigned char)tmp;
out 0x9,R10
.dbline 27
; /* 接收器与发送器使能*/
; UCSRB = (1<<RXEN)|(1<<TXEN);
ldi R24,24
out 0xa,R24
.dbline 29
; /* 设置帧格式: 8 个数据位, 2 个停止位*/
; UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
ldi R24,142
out 0x20,R24
.dbline -2
L1:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r tmp 10 i
.dbsym r baud 10 i
.dbend
.dbfunc e USART_Transmit _USART_Transmit fV
; data -> R16
.even
_USART_Transmit::
.dbline -1
.dbline 34
; }
;
; // 数据发送【发送5 到8 位数据位的帧】
; void USART_Transmit( unsigned char data )
; {
L3:
.dbline 37
L4:
.dbline 36
; /* 等待发送缓冲器为空 */
; while ( !( UCSRA & (1<<UDRE)) )
sbis 0xb,5
rjmp L3
.dbline 39
; ;
; /* 将数据放入缓冲器,发送数据 */
; UDR = data;
out 0xc,R16
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e delay _delay fV
; i -> R20,R21
.even
_delay::
xcall push_gset1
.dbline -1
.dbline 44
; }
;
;
; void delay(void)
; {
.dbline 46
; unsigned int i;
; for(i=1255;i!=0;i--)
ldi R20,1255
ldi R21,4
xjmp L10
L7:
.dbline 47
ldi R16,255
xcall _delayUs
L8:
.dbline 46
subi R20,1
sbci R21,0
L10:
.dbline 46
cpi R20,0
cpc R20,R21
brne L7
X0:
.dbline -2
L6:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
.dbfunc e main _main fV
; temp -> R20
.even
_main::
.dbline -1
.dbline 54
; delayUs(255);
; }
;
;
; WORD i;
;
; void main()
; {
.dbline 56
;
; unsigned char temp=0;
clr R20
.dbline 58
;
; port_init();
xcall _port_init
.dbline 60
;
; USART_Init(9600); //波特率9600 初始化串口
ldi R16,9600
ldi R17,37
xcall _USART_Init
.dbline 61
; USART_Transmit('O');
ldi R16,79
xcall _USART_Transmit
.dbline 62
; USART_Transmit('K');
ldi R16,75
xcall _USART_Transmit
xjmp L13
L12:
.dbline 65
;
; while(1)
; {
.dbline 66
; USART_Transmit(0x0d); //发送一个回车
ldi R16,13
xcall _USART_Transmit
.dbline 67
; USART_Transmit(0x0a); //发送一个换行
ldi R16,10
xcall _USART_Transmit
.dbline 68
; i=resetDS18B20();
xcall _resetDS18B20
mov R2,R16
clr R3
sts _i+1,R3
sts _i,R2
.dbline 69
; i=readTempDS18B20();
xcall _readTempDS18B20
sts _i+1,R17
sts _i,R16
.dbline 70
; if(i&(1<<3)) //判断倒数第四位是1还是0
sbrs R16,3
rjmp L15
.dbline 71
; {
.dbline 72
; temp=i>>4+1;
ldi R18,5
ldi R19,0
xcall lsr16
mov R20,R16
.dbline 73
; }
xjmp L16
L15:
.dbline 75
; else
; {
.dbline 76
; temp=i>>4;
lds R20,_i
lds R21,_i+1
lsr R21
ror R20
lsr R21
ror R20
lsr R21
ror R20
lsr R21
ror R20
.dbline 77
; }
L16:
.dbline 78
mov R16,R20
xcall _USART_Transmit
.dbline 79
xcall _delay
.dbline 80
L13:
.dbline 64
xjmp L12
X1:
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbend
.area bss(ram, con, rel)
.dbfile D:\桌面\ds18b20\main.c
_i::
.blkb 2
.dbsym e i _i i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -