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

📄 disp_2.s

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 S
字号:
	.module disp_2.c
	.area data(ram, con, rel)
_disp::
	.blkb 2
	.area idata
	.byte 192,249
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 164,176
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 153,146
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 130,248
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 128,144
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 192,192
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 192,192
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 192,192
	.area data(ram, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
	.dbsym e disp _disp A[16:16]c
_led_buf::
	.blkb 2
	.area idata
	.byte 1,2
	.area data(ram, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
	.blkb 2
	.area idata
	.byte 3,4
	.area data(ram, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
	.dbsym e led_buf _led_buf A[5:5]c
	.area text(rom, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
	.dbfunc e Disp_Init _Disp_Init fV
	.even
_Disp_Init::
	.dbline -1
	.dbline 24
; /*
; 模块说明:
; 
; 	LED数码管中断动态显示程序。
; 	1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
; 	2、动态调度由片内定时器1中断产生,中断周期为5mS。
; 	3、内部1 M晶振,程序采用单任务方式,软件延时。
; 	4、此模块文件为使用文件,可直接用于项目中。
; 	www.iccavr.com
; */
; #include "iom16v.h"
; #include <macros.h>
; 
; unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};
; 
; unsigned char led_buf[] = {1, 2, 3, 4, 0};			/*显示信息*/
; 
; /*------------------------------------------------------------------*-
; 
; 	 Disp_Init()
; 	 显示初始化
; 
; -*------------------------------------------------------------------*/
; void Disp_Init(void) {
	.dbline 27
; 
; 	/*初始化定时器*/
; 	OCR1A = 625;						/*计数周期为5mS,F=1M*/
	ldi R24,625
	ldi R25,2
	out 0x2b,R25
	out 0x2a,R24
	.dbline 28
; 	TIMSK |= (1 << OCIE1A);				/*比较中断A允许*/
	in R24,0x39
	ori R24,16
	out 0x39,R24
	.dbline 29
; 	SREG = 0x80;
	ldi R24,128
	out 0x3f,R24
	.dbline 30
; 	TCCR1A = 0x00;
	clr R2
	out 0x2f,R2
	.dbline 31
; 	TCCR1B = 0x08;						/*定时器工作在CTC计数器模式*/
	ldi R24,8
	out 0x2e,R24
	.dbline 32
; 	TCCR1B |= 0x02;						/*设置定时器的分频值为8分频*/
	in R24,0x2e
	ori R24,2
	out 0x2e,R24
	.dbline 35
; 	
; 	/*SPI接口初始化*/
; 	DDRB |= (1<<PB5) | (1<<PB7);		/* 设置MOSI 和SCK 为输出,其他为输入 */
	in R24,0x17
	ori R24,160
	out 0x17,R24
	.dbline 36
; 	SPCR = (1<<SPE) | (1<<MSTR)
	ldi R24,83
	out 0xd,R24
	.dbline 40
; 		| (1<<SPR1) | (1<<SPR0);		/* 使能SPI 主机模式,时钟为fck/128 */
; 	
; 	/*中断使能*/
; 	SEI();
	sei
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 24
	jmp _Int_TCCR1A
	.area text(rom, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
	.area bss(ram, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
L3:
	.blkb 1
	.area text(rom, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
	.dbfunc e Int_TCCR1A _Int_TCCR1A fV
	.dbsym s i L3 c
;           temp -> R20
	.even
_Int_TCCR1A::
	st -y,R2
	st -y,R16
	st -y,R17
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	xcall push_gset1
	.dbline -1
	.dbline 53
; }
; 
; /*------------------------------------------------------------------*-
;   
;  	Int_TCCR1A()
;  	LED数码管动态显示函数
; 
; 	定时器'T1',A组比较中断产生5mS周期性中断
; 	在中断里刷新显示
;  
; -*------------------------------------------------------------------*/
; #pragma interrupt_handler Int_TCCR1A: 7
; void Int_TCCR1A(void) {
	.dbline 58
; 
; 	unsigned char temp;
; 	static unsigned char i;
; 
; 	PORTB &= ~(1 << 4);					/*准备锁存*/
	cbi 0x18,4
	.dbline 59
; 	PORTB |= 0x0F;
	in R24,0x18
	ori R24,15
	out 0x18,R24
	.dbline 60
; 	PORTB |= (1 << 4);					/*锁存数据*/
	sbi 0x18,4
	.dbline 61
; 	if (i == 3) {
	lds R24,L3
	cpi R24,3
	brne L4
	.dbline 61
	.dbline 62
; 		PORTB &= ~(1 << 2);
	cbi 0x18,2
	.dbline 63
; 		}
L4:
	.dbline 64
; 	if (i == 2) {
	lds R24,L3
	cpi R24,2
	brne L6
	.dbline 64
	.dbline 65
; 		PORTB &= ~(1 << 1);
	cbi 0x18,1
	.dbline 66
; 		}
L6:
	.dbline 67
; 	if (i == 1) {
	lds R24,L3
	cpi R24,1
	brne L8
	.dbline 67
	.dbline 68
; 		PORTB &= ~(1 << 0);
	cbi 0x18,0
	.dbline 69
; 		}
L8:
	.dbline 70
; 	if (i == 0) {
	lds R2,L3
	tst R2
	brne L10
	.dbline 70
	.dbline 71
; 		PORTB &= ~(1 << 3);
	cbi 0x18,3
	.dbline 72
; 		}
L10:
	.dbline 74
; 	
; 	temp = led_buf[i] % 16;		/**/
	ldi R24,<_led_buf
	ldi R25,>_led_buf
	lds R30,L3
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldi R17,16
	xcall mod8u
	mov R20,R16
	.dbline 75
; 	temp = disp[temp];			/**/
	ldi R24,<_disp
	ldi R25,>_disp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R20,z+0
	.dbline 76
; 	SPDR = temp;
	out 0xf,R20
	.dbline 78
; 
; 	if (i > 3) {
	ldi R24,3
	lds R2,L3
	cp R24,R2
	brsh L12
	.dbline 78
	.dbline 79
; 		i = 0;
	clr R2
	sts L3,R2
	.dbline 80
; 		}
	xjmp L13
L12:
	.dbline 81
	.dbline 82
	lds R24,L3
	subi R24,255    ; addi 1
	sts L3,R24
	.dbline 83
L13:
	.dbline -2
L2:
	xcall pop_gset1
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r temp 20 c
	.dbend

⌨️ 快捷键说明

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