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

📄 main.s

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~3\icc\016-DS18B20-LED4\main.c
	.dbfunc e delay_ms _delay_ms fV
;              b -> R20
;              i -> R16,R17
	.even
_delay_ms::
	xcall push_gset1
	.dbline -1
	.dbline 30
; /*
; 实验十六:
; 
; 	DS18B20实验,动态LED数据管显示温度。
; 	1、AVR单片机读取DS18B20实验,并通过学习板上在LED数码管显示温度。
; 	2、晶振频率为内部1MHz。
; 	3、DS18B20由PA7口实现单总线访问,实现读取温度。
; 	4、低层驱动函数中带有中断保护,程序可直接用于商业产品中。
; 	5、LED数码管显示采用定时器中断方式,全中断驱动,不需要主程序管理,
; 		只要把要显示的内部放到显示缓存区就行了。
; 	6、进行此实验请插上SPI短路块。
; 	7、DS18B20的电源脚接到VCC及GND上面,数据线接到PF2口。
; 
; 	AVR  mega128学习板
; 	AVR_AFA
; 	www.iccavr.com
; 	11:48 2007-10-170
; */
; 
; #include "iom128v.h"									/*包含相关头文件*/
; #include "ds1820.h"
; #include "led4.h"
; 
; /*
; 延时函数
; 
; 延时单位为:mS。
; CPU频率为:1MHz。
; */
; void delay_ms(unsigned int i) {
	xjmp L3
L2:
	.dbline 33
; 
; 	unsigned char b;
; 	while (i --) {
	.dbline 34
	ldi R20,1
	xjmp L8
L5:
	.dbline 34
L6:
	.dbline 34
	inc R20
L8:
	.dbline 34
	tst R20
	brne L5
	.dbline 35
L3:
	.dbline 33
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L2
	tst R3
	brne L2
X0:
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r b 20 c
	.dbsym r i 16 i
	.dbend
	.dbfunc e io_init _io_init fV
	.even
_io_init::
	.dbline -1
	.dbline 39
; 		for (b = 1; b; b++);
; 		}
; }
; 
; /*IO口初始化函数*/
; void io_init(void) {
	.dbline 41
; 
; 	DDRA = 0x00;										/*方向输入*/
	clr R2
	out 0x1a,R2
	.dbline 42
; 	PORTA = 0xFF;										/*打开上拉*/
	ldi R24,255
	out 0x1b,R24
	.dbline 43
; 	DDRB = 0xFF;										/*方向输出*/
	out 0x17,R24
	.dbline 44
; 	PORTB = 0xFF;										/*输出高电平*/
	out 0x18,R24
	.dbline 45
; 	DDRC = 0x00;										/*不用的IO口建议设置为输入带上拉*/
	out 0x14,R2
	.dbline 46
; 	PORTC = 0xFF;
	out 0x15,R24
	.dbline 47
; 	DDRD = 0x00;
	out 0x11,R2
	.dbline 48
; 	PORTD = 0xFF;
	out 0x12,R24
	.dbline 49
; 	DDRE = 0x00;
	out 0x2,R2
	.dbline 50
; 	PORTE = 0xFF;
	out 0x3,R24
	.dbline 51
; 	DDRF = 0x00;
	sts 97,R2
	.dbline 52
; 	PORTF = 0xFF;
	sts 98,R24
	.dbline 53
; 	DDRG = 0x00;
	sts 100,R2
	.dbline 54
; 	PORTG = 0xFF;
	sts 101,R24
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e int_to_bcd _int_to_bcd fV
;              i -> R20
;           temp -> R22,R23
	.even
_int_to_bcd::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 58
; }
; 
; /*十六进制转十进制函数*/
; void int_to_bcd(unsigned int temp) { 
	.dbline 61
	clr R20
	xjmp L14
L11:
	.dbline 61
	.dbline 62
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall mod16u
	ldi R24,<_led_buf
	ldi R25,>_led_buf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 63
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall div16u
	movw R22,R16
	.dbline 64
L12:
	.dbline 61
	inc R20
L14:
	.dbline 61
; 	unsigned char i;
; 
; 	for (i = 0; i < 4; i++) {
	cpi R20,4
	brlo L11
	.dbline -2
L10:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r temp 22 i
	.dbend
	.dbfunc e main _main fV
;              i -> R20,R21
	.even
_main::
	.dbline -1
	.dbline 75
; 	led_buf[i] = temp % 10;								/*提取当前变量最低位*/
; 	temp = temp / 10;									/*去掉当前最低位值*/
;     }
; }
; 
; /*
; 主函数
; 
; 实现系统的初始化操作。
; 周期性读取温度。
; 然后放入显示缓存区。
; 上面两个任务之间完全独立运行,方便移植。
; */
; void main(void) {
	.dbline 79
; 
; 	unsigned int i;
; 
; 	io_init();
	xcall _io_init
	.dbline 80
; 	delay_ms(200);
	ldi R16,200
	ldi R17,0
	xcall _delay_ms
	.dbline 81
; 	ds1820_reset();										/*复位D18B20*/
	xcall _ds1820_reset
	.dbline 82
; 	disp_init();										/*启动显示任务*/
	xcall _disp_init
	.dbline 83
; 	led_buf[4] = 1;										/*小数点位置*/
	ldi R24,1
	sts _led_buf+4,R24
	xjmp L18
L17:
	.dbline 84
	.dbline 85
	xcall _ds1820_start
	.dbline 86
	ldi R16,2000
	ldi R17,7
	xcall _delay_ms
	.dbline 87
	xcall _ds1820_read_temp
	movw R20,R16
	.dbline 88
	ldi R16,10
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R20,R16
	lsr R21
	ror R20
	lsr R21
	ror R20
	lsr R21
	ror R20
	lsr R21
	ror R20
	.dbline 89
	movw R16,R20
	xcall _int_to_bcd
	.dbline 90
L18:
	.dbline 84
	xjmp L17
X1:
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbend

⌨️ 快捷键说明

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