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

📄 main.s

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~2\icc\019-TEST\main.c
	.dbfunc e main _main fV
;           temp -> y+0
	.even
_main::
	sbiw R28,1
	.dbline -1
	.dbline 23
; /*
; 实验十三:
; 
; 	AVR单片机I2C总线实验。
; 	1、用24C02记录CPU启动次数,并在PB口上显示出来。
; 	2、内部1 M晶振,程序采用单任务方式,软件延时。
; 	3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)/PC0/PC1短路块。
; 	4、通过此实验,可以I2C总线操作有个初步认识。
; 	
; 	AVR  mega16学习板
; 	www.iccavr.com
; 	14:42 2007-4-9
; */
; 
; #include "iom16v.h"
; #include "beep.h"
; #include "delay.h"
; #include "ds1302.h"
; #include "spi.h"
; #include "twi.h"
; #include "uart.h"
; 
; void main(void) {
	.dbline 27
; 
; 	unsigned char temp;
; 
; 	PORTA = 0xFF;				/*打开上拉*/
	ldi R24,255
	out 0x1b,R24
	.dbline 28
; 	DDRA = 0x00;				/*方向输入*/
	clr R2
	out 0x1a,R2
	.dbline 29
; 	PORTB = 0xFF;				/*电平设置*/
	out 0x18,R24
	.dbline 30
; 	DDRB = 0xFF;				/*方向输出*/
	out 0x17,R24
	.dbline 31
; 	PORTC = 0xFF;
	out 0x15,R24
	.dbline 32
; 	DDRC = 0x00;
	out 0x14,R2
	.dbline 33
; 	PORTD = 0xFF;
	out 0x12,R24
	.dbline 34
; 	DDRD = 0x20;
	ldi R24,32
	out 0x11,R24
	.dbline 37
; 
; 	/*蜂鸣器测验试*/
; 	delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 38
; 	beep(300);
	ldi R16,300
	ldi R17,1
	xcall _beep
	.dbline 41
; 
; 	/*按键及指示灯测试*/
; 	delay_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	xjmp L3
L2:
	.dbline 42
; 	while (1) {
	.dbline 43
; 		temp = PINA;					/*提取按键*/
	in R2,0x19
	std y+0,R2
	.dbline 44
; 		if (temp != 0xFF) {
	mov R24,R2
	cpi R24,255
	breq L5
	.dbline 44
	.dbline 45
; 			PORTB = temp;				/*显示按键值*/
	out 0x18,R24
	.dbline 46
; 			beep(200);
	ldi R16,200
	ldi R17,0
	xcall _beep
L7:
	.dbline 47
L8:
	.dbline 47
; 			while (PINA != 0xFF);		/*等待按键松开*/
	in R24,0x19
	cpi R24,255
	brne L7
	.dbline 48
; 			}
L5:
	.dbline 49
; 		if ((PIND & 0x04) == 0x00) {	/*INT键退出*/
	sbic 0x10,2
	rjmp L10
	.dbline 49
	.dbline 50
; 			break;
	xjmp L4
L10:
	.dbline 52
L3:
	.dbline 42
	xjmp L2
L4:
	.dbline 55
; 			}
; 		}
; 
; 	/*SPI总线HC595芯片测试*/
; 	PORTB = 0xEF;
	ldi R24,239
	out 0x18,R24
	.dbline 56
; 	delay_ms(3000);
	ldi R16,3000
	ldi R17,11
	xcall _delay_ms
	.dbline 57
; 	SPI_MasterInit();					/*初始SPI接口*/
	xcall _SPI_MasterInit
	.dbline 58
; 	PORTB = 0xF0;						/*打开4位数码管*/
	ldi R24,240
	out 0x18,R24
	.dbline 59
	clr R2
	std y+0,R2
	xjmp L15
L12:
	.dbline 59
	.dbline 60
	ldi R24,<_disp
	ldi R25,>_disp
	ldd R30,y+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI_595_Out
	.dbline 61
	ldi R16,500
	ldi R17,1
	xcall _delay_ms
	.dbline 62
L13:
	.dbline 59
	ldd R24,y+0
	subi R24,255    ; addi 1
	std y+0,R24
L15:
	.dbline 59
; 	for (temp = 0; temp < 10; temp ++) {
	ldd R24,y+0
	cpi R24,10
	brlo L12
	.dbline 63
; 		SPI_595_Out(disp[temp]);		/*显示数据输出*/
; 		delay_ms(500);
; 		}
; 	SPCR = 0x00;						/*关闭SPI接口*/
	clr R2
	out 0xd,R2
	.dbline 66
; 	
; 	/*IIC总线24C02芯片测试*/
; 	PORTB = 0xDF;
	ldi R24,223
	out 0x18,R24
	.dbline 67
; 	delay_ms(3000);
	ldi R16,3000
	ldi R17,11
	xcall _delay_ms
	.dbline 68
; 	twi_write(0x08, 0x55);				/*写入标志*/
	ldi R18,85
	ldi R16,8
	xcall _twi_write
	.dbline 69
; 	delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 70
; 	twi_read(0x08, &temp);				/*读出标志*/
	movw R18,R28
	ldi R16,8
	xcall _twi_read
	.dbline 71
; 	delay_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _delay_ms
	.dbline 72
; 	if (temp == 0x55) {					/*校验标志*/
	ldd R24,y+0
	cpi R24,85
	brne L16
	.dbline 72
	.dbline 73
; 		beep(300);
	ldi R16,300
	ldi R17,1
	xcall _beep
	.dbline 74
; 		}
	xjmp L17
L16:
	.dbline 75
; 	else {
	.dbline 76
; 		beep(1500);
	ldi R16,1500
	ldi R17,5
	xcall _beep
	.dbline 77
; 		}
L17:
	.dbline 80
; 
; 	/*DS302芯片测试*/
; 	PORTB = 0xBF;
	ldi R24,191
	out 0x18,R24
	.dbline 81
; 	delay_ms(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	.dbline 82
; 	ds1302_init();						/*初始化DS302*/
	xcall _ds1302_init
	.dbline 83
; 	time_buf[5] = 0x55;
	ldi R24,85
	sts _time_buf+5,R24
	.dbline 84
; 	time_buf[6] = 0x00;
	clr R2
	sts _time_buf+6,R2
	.dbline 85
; 	ds1302_write_time();				/*写入标志*/
	xcall _ds1302_write_time
	.dbline 86
; 	delay_ms(2000);
	ldi R16,2000
	ldi R17,7
	xcall _delay_ms
	.dbline 87
; 	ds1302_read_time();					/*读出标志*/
	xcall _ds1302_read_time
	.dbline 88
; 	if ((time_buf[5] == 0x55) && (time_buf[6] != 0x00)) {/*校验标志*/
	lds R24,_time_buf+5
	cpi R24,85
	brne L20
	lds R2,_time_buf+6
	tst R2
	breq L20
	.dbline 88
	.dbline 89
; 		beep(300);
	ldi R16,300
	ldi R17,1
	xcall _beep
	.dbline 90
; 		}
	xjmp L21
L20:
	.dbline 91
; 	else {
	.dbline 92
; 		beep(1500);
	ldi R16,1500
	ldi R17,5
	xcall _beep
	.dbline 93
; 		}
L21:
	.dbline 96
; 
; 	/*串口测试*/
; 	PORTB = 0xF7;
	ldi R24,247
	out 0x18,R24
	.dbline 97
; 	delay_ms(3000);
	ldi R16,3000
	ldi R17,11
	xcall _delay_ms
	.dbline 98
; 	Uart_Init();
	xcall _Uart_Init
	xjmp L25
L24:
	.dbline 99
	.dbline 100
	xcall _Uart_Receive
	std y+0,R16
	.dbline 101
	mov R2,R16
	com R2
	out 0x18,R2
	.dbline 102
	xcall _Uart_Transmit
	.dbline 103
L25:
	.dbline 99
	xjmp L24
X0:
	.dbline -2
L1:
	adiw R28,1
	.dbline 0 ; func end
	ret
	.dbsym l temp 0 c
	.dbend

⌨️ 快捷键说明

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