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

📄 main.s

📁 ATmega128的GPS例子
💻 S
📖 第 1 页 / 共 4 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile D:\SOURCE~1\gps20080503\main.c
	.area data(ram, con, rel)
	.dbfile D:\SOURCE~1\gps20080503\main.c
_sink0_num::
	.blkb 1
	.area idata
	.byte 100
	.area data(ram, con, rel)
	.dbfile D:\SOURCE~1\gps20080503\main.c
	.dbfile D:\SOURCE~1\gps20080503\define.h
	.dbsym e sink0_num _sink0_num c
	.area text(rom, con, rel)
	.dbfile D:\SOURCE~1\gps20080503\define.h
	.dbfile D:\SOURCE~1\gps20080503\initrialm16.h
	.dbfunc e Init_Devices _Init_Devices fV
	.even
_Init_Devices::
	.dbline -1
	.dbline 36
; //ICC-AVR application builder : 2007-6-27 10:26:06
; // Target : M8
; // Crystal: 8.0000Mhz
; 
; /**************初始化m8函数***************/
; #ifndef Initrial_M16_H
; #define Initrial_M16_H
; 
; /**************************************************************
; **函数名称	     :void init_devices(void)
; **函数功能	     :初始化设备
; **输入参数      :无
; **返回值	     :无
; **外定义变量:无
; **调用的函数:无
; **************************************************************/
; void Init_Devices(void);
; 
; /**************************************************************
; **函数名称	     :void port_init(void)
; **函数功能      :初始化端口
; **输入参数      :无
; **返回值	     :无
; **外定义变量:无
; **调用的函数: Port_init();
; **************************************************************/
; void Port_Init(void);
; void Init_Devices(void);
; void uart0_init(void);
; void uart0_rx_isr(void);
; extern void Get_GPRMC_data(void);//提取GPRMC数据
; 
; 
; //call this routine to initialize all peripherals
; void Init_Devices(void)
; {
	.dbline 38
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 39
;  Port_Init();
	xcall _Port_Init
	.dbline 40
;  uart0_init();
	xcall _uart0_init
	.dbline 41
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 42
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 43
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 44
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Port_Init _Port_Init fV
	.even
_Port_Init::
	.dbline -1
	.dbline 49
;  //all peripherals are now initialized
; }
; 
; void Port_Init(void)
; {
	.dbline 50
; 	PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 51
; 	DDRB  = 0xFF;
	out 0x17,R24
	.dbline 52
; 	PORTC = 0x7F; //m103 output only
	ldi R24,127
	out 0x15,R24
	.dbline 53
; 	DDRC  = 0x7F;
	out 0x14,R24
	.dbline 54
; 	PORTD = 0xFF;
	ldi R24,255
	out 0x12,R24
	.dbline 55
; 	DDRD  = 0xFF;
	out 0x11,R24
	.dbline 57
; 
; 	DDRD &=~ BIT(PD0);
	cbi 0x11,0
	.dbline 58
; 	PORTD &= ~ BIT(PD0);
	cbi 0x12,0
	.dbline 60
; 	
; 	DDRA &=~ BIT(PA1);//按键
	cbi 0x1a,1
	.dbline 61
; 	DDRA &=~ BIT(PA3);
	cbi 0x1a,3
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 73
; 	//PORTA &= ~ BIT(PA5);
;  	//PORTA &= ~ BIT(PA7);
; 	
; 	
;  
; }
; 
; //UART0 initialize
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; void uart0_init(void)
; {
	.dbline 74
;  UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 75
;  UCSRA = 0x00;
	out 0xb,R2
	.dbline 76
;  UCSRC = BIT(URSEL) | 0x06;
	ldi R24,134
	out 0x20,R24
	.dbline 77
;  UBRRL = 0x33; //set baud rate lo
	ldi R24,51
	out 0x9,R24
	.dbline 78
;  UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 79
;  UCSRB = 0x98;
	ldi R24,152
	out 0xa,R24
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 44
	jmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile D:\SOURCE~1\gps20080503\initrialm16.h
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;           data -> R20
	.even
_uart0_rx_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	st -y,R20
	.dbline -1
	.dbline 84
; }
; 
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; {
	.dbline 86
; 	char data;
;  	data = UDR;
	in R20,0xc
	.dbline 87
; 	if(data == '$')//开始字符
	cpi R20,36
	brne L5
X0:
	.dbline 88
; 	{
	.dbline 89
; 		usart_flag |= BIT(SINK0_START);
	lds R24,_usart_flag
	ori R24,1
	sts _usart_flag,R24
	.dbline 90
; 		sink0_count = 0;	
	clr R2
	sts _sink0_count,R2
	.dbline 91
; 	}
L5:
	.dbline 92
; 	if(usart_flag & BIT(SINK0_START))
	lds R2,_usart_flag
	sbrs R2,0
	rjmp L7
X1:
	.dbline 93
; 	{
	.dbline 94
; 		sink0_buf[sink0_count] = data; 
	ldi R24,<_sink0_buf
	ldi R25,>_sink0_buf
	lds R30,_sink0_count
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 95
; 		sink0_count ++;
	lds R24,_sink0_count
	subi R24,255    ; addi 1
	sts _sink0_count,R24
	.dbline 96
; 	}
L7:
	.dbline 97
; 	if(data == 0x0a)//换行结束字符
	cpi R20,10
	brne L9
X2:
	.dbline 98
; 	{
	.dbline 99
; 		usart_flag &=~ BIT(SINK0_START);
	lds R24,_usart_flag
	andi R24,254
	sts _usart_flag,R24
	.dbline 100
; 		usart_flag |= BIT(SINK0_FINISH);
	ori R24,2
	sts _usart_flag,R24
	.dbline 102
; 		
; 	}
L9:
	.dbline 103
; 	if(usart_flag & BIT(SINK0_FINISH))
	lds R2,_usart_flag
	sbrs R2,1
	rjmp L11
X3:
	.dbline 104
; 	{
	.dbline 105
; 		Get_GPRMC_data();	
	xcall _Get_GPRMC_data
	.dbline 106
; 		usart_flag &=~ BIT(SINK0_FINISH);			
	lds R24,_usart_flag
	andi R24,253
	sts _usart_flag,R24
	.dbline 107
; 	}
L11:
	.dbline -2
L4:
	.dbline 0 ; func end
	ld R20,y+
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbsym r data 20 c
	.dbend
	.dbfile D:\SOURCE~1\gps20080503\delay.h
	.dbfunc e Delay_1us _Delay_1us fV
	.even
_Delay_1us::
	.dbline -1
	.dbline 53
; #ifndef	_DELAY_H
; #define	_DELAY_H
; 
; // mcu:avr   crystal=8MHz
; 
; /**************************************************************
; **函数功能:延时1us
; **输入参数:无
; **返回值:无
; **在本函数外定义变量:无
; **调用的函数:NOP()
; **************************************************************/
; void Delay_1us(void);
; 
; /**************************************************************
; **函数功能:us级延时
; **输入参数:xus:延时us数
; **返回值:无
; **在本函数外定义变量:无
; **调用的函数:Delay_1us()
; **************************************************************/
; void Delay_Us(unsigned char xus);
; 
; /**************************************************************
; **函数功能:延时1ms
; **输入参数:无
; **返回值:无
; **在本函数外定义变量:无
; **调用的函数:NOP()
; **************************************************************/
; void Delay_1ms(void);
; 
; /**************************************************************
; **函数功能:ms级延时
; **输入参数:xms:延时ms数
; **返回值:无
; **在本函数外定义变量:无
; **调用的函数:Delay_1ms()
; **************************************************************/
; void Delay_Ms(unsigned int xms);
; 
; /**************************************************************
; **函数功能:10us级延时
; **输入参数:x10us:延时x10us数
; **返回值:无
; **在本函数外定义变量:无
; **调用的函数:无
; **************************************************************/
; void Delay10us(Word x10us);
; 
; 
; void Delay_1us()
; {
	.dbline 54
; 	NOP();
	nop
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Delay_Us _Delay_Us fV
;              i -> R10
;            xus -> R12
	.even
_Delay_Us::
	st -y,R10
	st -y,R12
	mov R12,R16
	.dbline -1
	.dbline 58
; }
; 
; void Delay_Us(unsigned char xus)
; {
	.dbline 60
; 	unsigned char i;
; 	for(i=0;i<xus;i++)
	clr R10
	xjmp L18
L15:
	.dbline 61
; 		Delay_1us();
	xcall _Delay_1us
L16:
	.dbline 60
	inc R10
L18:
	.dbline 60
	cp R10,R12
	brlo L15
X4:
	.dbline -2
L14:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym r i 10 c
	.dbsym r xus 12 c
	.dbend
	.dbfunc e Delay_1ms _Delay_1ms fV
;              i -> R16,R17
	.even
_Delay_1ms::
	.dbline -1
	.dbline 65
; }
; 
; void Delay_1ms(void)
; {
	.dbline 67
; 	unsigned int i;
; 	for(i=0;i<1142;i++)
	clr R16
	clr R17
	xjmp L23
L20:
	.dbline 68
; 		;
L21:
	.dbline 67
	subi R16,255  ; offset = 1
	sbci R17,255
L23:
	.dbline 67
	cpi R16,118
	ldi R30,4
	cpc R17,R30
	brlo L20
X5:
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e Delay_Ms _Delay_Ms fV
;              i -> R20,R21
;              j -> R22,R23
;            xms -> R16,R17
	.even
_Delay_Ms::
	xcall push_xgsetF000
	.dbline -1
	.dbline 72
; }
; 
; void Delay_Ms(Word xms) //crystal=8MHz
; {
	.dbline 74
; 	Word i,j; //variable:declare Word
; 	for(i=0; i<xms; i++)
	clr R20
	clr R21
	xjmp L28
L25:
	.dbline 75
; 		for(j=0; j<498;j++)
	clr R22
	clr R23
	xjmp L32
L29:
	.dbline 76
; 		{
	.dbline 77
; 			NOP();
	nop
	.dbline 78
; 			NOP();
	nop
	.dbline 79
; 			NOP();
	nop
	.dbline 80
; 			NOP();
	nop
	.dbline 81
; 			NOP();
	nop
	.dbline 82
; 			NOP();
	nop
	.dbline 83
; 			NOP();
	nop
	.dbline 84
; 			NOP();
	nop
	.dbline 85
; 			NOP();
	nop
	.dbline 86
; 		}
L30:
	.dbline 75
	subi R22,255  ; offset = 1
	sbci R23,255
L32:
	.dbline 75
	cpi R22,242
	ldi R30,1
	cpc R23,R30
	brlo L29
X6:
L26:
	.dbline 74
	subi R20,255  ; offset = 1
	sbci R21,255
L28:
	.dbline 74
	cp R20,R16
	cpc R21,R17
	brlo L25
X7:
	.dbline -2
L24:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r xms 16 i
	.dbend
	.dbfunc e Delay10us _Delay10us fV
;              i -> R20,R21
;              j -> R22
;          x10us -> R16,R17
	.even
_Delay10us::
	xcall push_xgsetF000
	.dbline -1
	.dbline 90
; }
; 
; void Delay10us(Word x10us)//crystal=8MHz
; {
	.dbline 92
; 	Word i;Byte j; //variable:declare Word
; 	for(i=0; i<x10us; i++)
	clr R20
	clr R21
	xjmp L37
L34:
	.dbline 93
; 	{
	.dbline 94
; 			for(j=0;j<2;j++)
	clr R22
	xjmp L41
L38:
	.dbline 95
; 			{
	.dbline 96
; 			 	NOP();
	nop
	.dbline 97
; 				NOP();
	nop
	.dbline 98
; 				NOP();
	nop
	.dbline 99
; 			}
L39:
	.dbline 94
	inc R22
L41:
	.dbline 94
	cpi R22,2
	brlo L38
X8:
	.dbline 100
; 	}
L35:
	.dbline 92
	subi R20,255  ; offset = 1
	sbci R21,255
L37:
	.dbline 92
	cp R20,R16
	cpc R21,R17
	brlo L34
X9:
	.dbline -2
L33:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r i 20 i
	.dbsym r j 22 c
	.dbsym r x10us 16 i
	.dbend
	.dbfile D:\SOURCE~1\gps20080503\smg12232zk.h
	.dbfunc e Hzk_Dis_Words _Hzk_Dis_Words fV
;    ram_address -> R10
;              i -> R20
;    lcd_pointer -> R22,R23
;           xpos -> R12
;           ypos -> R14
	.even
_Hzk_Dis_Words::
	xcall push_xgsetF0FC
	mov R12,R18
	mov R14,R16
	ldd R22,y+10
	ldd R23,y+11
	.dbline -1
	.dbline 45
;                  
; /******************  SMG12232ZK串行接口程序******************
; * Title : Accessing to LCD-CONTROLLER                                   
; * Date :  2007.10.18                                                      
; * Support telephone:       
; * Support fax :     
; * Create by :	       
; * DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER  
; *******************************************************************/
; #ifndef __SMG12232ZK_H
; #define __SMG12232ZK_H	
; 
; #define LCD_PORT1 PORTB
; 	#define LCD_SCLK PB4
; 	#define LCD_STD PB3
; 	
; #define LCD_PORT2 PORTC
; 	#define LCD_CS	PC3
; 
; #define LCD_CS_H LCD_PORT2 |= BIT(LCD_CS)
; #define LCD_CS_L LCD_PORT2 &=~ BIT(LCD_CS)
; #define LCD_STD_H LCD_PORT1 |= BIT(LCD_STD)
; #define LCD_STD_L LCD_PORT1 &=~ BIT(LCD_STD)
; #define LCD_SCLK_H LCD_PORT1 |= BIT(LCD_SCLK)
; #define LCD_SCLK_L LCD_PORT1 &=~ BIT(LCD_SCLK)
; 
; 
; 
; void Send_8bit(Word x);//串行发送8位数据
; void Lcd_Write(Byte start,Byte data);//模块写入子程序
; void Lcd_Reset(void);//模块复位子程序
; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度		
; void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num);//xpos为列数,ypos为行数,num字符串长度									
; void Hzk_Dis_Clr(void);//汉字显示清屏
; 
; Long lcd_data1;
; Long lcd_data2;
; 
; /****************发送汉字子程序******************
; ** xpos为列数,ypos为行数
; **lcd_pointer为字符串首地址
; *********************************************************/
; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度									
; {
	.dbline 46
; 	Byte i=0,ram_address;//ram_address:首地址
	clr R20
	xjmp L44
L43:
	.dbline 49
; 	//首先判断字符串得长度
; 	while(*(lcd_pointer+i) != '\0')//字符串长度
; 	{
	.dbline 50
; 		i++;
	inc R20
	.dbline 51
; 	}//i=字符串长度	
L44:
	.dbline 48
	mov R30,R20
	clr R31
	add R30,R22
	adc R31,R23
	ldd R2,z+0
	tst R2
	brne L43
X10:
	.dbline 52
; 	if(i>15)
	ldi R24,15
	cp R24,R20
	brsh L46
X11:
	.dbline 53
; 	{
	.dbline 54
; 		i=15;
	ldi R20,15
	.dbline 55
; 	}
L46:
	.dbline 56
; 	if(ypos==1)
	mov R24,R14
	cpi R24,1
	brne L48
X12:
	.dbline 57
; 	{
	.dbline 58
; 		ram_address = 0x80+xpos-1;
	mov R24,R12
	subi R24,128    ; addi 128
	subi R24,1
	mov R10,R24
	.dbline 59
; 	}
	xjmp L49
L48:
	.dbline 60
; 	else if(ypos==2)
	mov R24,R14
	cpi R24,2
	brne L50
X13:
	.dbline 61
; 	{
	.dbline 62
; 		ram_address = 0x90+xpos-1;
	mov R24,R12
	subi R24,112    ; addi 144
	subi R24,1
	mov R10,R24
	.dbline 63
; 	}
L50:
L49:
	.dbline 64
; 	Lcd_Write(0xf8,ram_address);
	mov R18,R10
	ldi R16,248
	xcall _Lcd_Write
	.dbline 65
; 	for(;i>0;i--)
	xjmp L55
L52:
	.dbline 66
; 	{
	.dbline 67
; 		Lcd_Write(0xfa,*lcd_pointer);	
	movw R30,R22
	ldd R18,z+0
	ldi R16,250
	xcall _Lcd_Write
	.dbline 68
; 		lcd_pointer++;
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 69
; 	}	
L53:
	.dbline 65
	dec R20
L55:
	.dbline 65
	ldi R24,0
	cp R24,R20
	brlo L52
X14:
	.dbline -2
L42:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r ram_address 10 c
	.dbsym r i 20 c
	.dbsym r lcd_pointer 22 pc
	.dbsym r xpos 12 c
	.dbsym r ypos 14 c
	.dbend
	.dbfunc e Hzk_Dis_Char _Hzk_Dis_Char fV
;    ram_address -> R22
;              i -> R10
;            num -> y+12
;    lcd_pointer -> R20,R21
;           xpos -> R12
;           ypos -> R14
	.even
_Hzk_Dis_Char::
	xcall push_xgsetF0FC
	mov R12,R18
	mov R14,R16
	ldd R20,y+10
	ldd R21,y+11
	.dbline -1
	.dbline 74
; 	
; }
; 
; void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num)//xpos为列数,ypos为行数,num字符串长度									
; {
	.dbline 75
; 	Byte i=0,ram_address;//ram_address:首地址
	clr R10
	.dbline 76
; 	if(ypos==1)
	mov R24,R14
	cpi R24,1
	brne L57
X15:
	.dbline 77
; 	{
	.dbline 78
; 		ram_address = 0x80+xpos-1;
	mov R22,R12
	subi R22,128    ; addi 128
	subi R22,1
	.dbline 79
; 	}
	xjmp L58
L57:
	.dbline 80
; 	else if(ypos==2)
	mov R24,R14
	cpi R24,2
	brne L59
X16:
	.dbline 81
; 	{
	.dbline 82
; 		ram_address = 0x90+xpos-1;
	mov R22,R12
	subi R22,112    ; addi 144
	subi R22,1

⌨️ 快捷键说明

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