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

📄 gps.lst

📁 用avr单片机接收GPS的数据的c语言程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0025) 
(0026)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    0207 2422      CLR	R2
    0208 B82A      OUT	0x0A,R2
(0027)  UCSRA = 0x00;
    0209 B82B      OUT	0x0B,R2
(0028)  UCSRC = BIT(URSEL) | 0x06;
    020A E886      LDI	R24,0x86
    020B BD80      OUT	0x20,R24
(0029)  UBRRL = 0XCF; //set baud rate lo
    020C EC8F      LDI	R24,0xCF
    020D B989      OUT	0x09,R24
(0030)  UBRRH = 0X00; //set baud rate hi
    020E BC20      OUT	0x20,R2
(0031)  UCSRB = 0x90;//10010000
    020F E980      LDI	R24,0x90
    0210 B98A      OUT	0x0A,R24
(0032)  UART_wp = 0;
    0211 2433      CLR	R3
    0212 92300089  STS	UART_wp+1,R3
    0214 92200088  STS	UART_wp,R2
(0033)  read_pt = 0;
    0216 92300087  STS	read_pt+1,R3
    0218 92200086  STS	read_pt,R2
    021A 9508      RET
_uart0_rx_isr:
    021B 922A      ST	R2,-Y
    021C 923A      ST	R3,-Y
    021D 938A      ST	R24,-Y
    021E 939A      ST	R25,-Y
    021F 93EA      ST	R30,-Y
    0220 93FA      ST	R31,-Y
    0221 B62F      IN	R2,0x3F
    0222 922A      ST	R2,-Y
(0034) }
(0035) 
(0036) #pragma interrupt_handler uart0_rx_isr:14
(0037) void uart0_rx_isr(void)
(0038) {
(0039)      //uart has received a character in UDR
(0040) 	if (count<max)
    0223 9180048A  LDS	R24,count
    0225 9190048B  LDS	R25,count+1
    0227 3080      CPI	R24,0
    0228 E0E4      LDI	R30,4
    0229 079E      CPC	R25,R30
    022A F4D4      BGE	0x0245
(0041) 	/* read the received data */
(0042) 	{
(0043) 	    rcv_buf[UART_wp++]=UDR; /* store received data in buffer */
    022B 90200088  LDS	R2,UART_wp
    022D 90300089  LDS	R3,UART_wp+1
    022F 01C1      MOVW	R24,R2
    0230 9601      ADIW	R24,1
    0231 93900089  STS	UART_wp+1,R25
    0233 93800088  STS	UART_wp,R24
    0235 E88A      LDI	R24,0x8A
    0236 E090      LDI	R25,0
    0237 01F1      MOVW	R30,R2
    0238 0FE8      ADD	R30,R24
    0239 1FF9      ADC	R31,R25
    023A B02C      IN	R2,0x0C
    023B 8220      STD	Z+0,R2
(0044) 	    count++;
    023C 9180048A  LDS	R24,count
    023E 9190048B  LDS	R25,count+1
    0240 9601      ADIW	R24,1
    0241 9390048B  STS	count+1,R25
    0243 9380048A  STS	count,R24
(0045) 	}
(0046) 	 
(0047) 	/* calculate buffer index */
(0048) 	if (UART_wp==max)
    0245 91800088  LDS	R24,UART_wp
    0247 91900089  LDS	R25,UART_wp+1
    0249 3080      CPI	R24,0
    024A E0E4      LDI	R30,4
    024B 079E      CPC	R25,R30
    024C F431      BNE	0x0253
(0049) 	   UART_wp = 0;   // full return to the start
    024D 2422      CLR	R2
    024E 2433      CLR	R3
    024F 92300089  STS	UART_wp+1,R3
    0251 92200088  STS	UART_wp,R2
    0253 9029      LD	R2,Y+
    0254 BE2F      OUT	0x3F,R2
    0255 91F9      LD	R31,Y+
    0256 91E9      LD	R30,Y+
    0257 9199      LD	R25,Y+
    0258 9189      LD	R24,Y+
    0259 9039      LD	R3,Y+
    025A 9029      LD	R2,Y+
    025B 9518      RETI
(0050) }
(0051) 
(0052) /*********************************************************************
(0053) *                   read data from buffer
(0054) description: 1 close interrupt 
(0055)              2 whether there are data to be read
(0056)              3 read data, and count--
(0057)              4 return the data
(0058) 			 5 rp point to next character
(0059) **********************************************************************/
(0060) char Read_buf(void)
(0061) {
(0062)     char temp;
(0063) 	while ( !count);//if no data ,wait for new data
_Read_buf:
  temp                 --> R16
    025C 9020048A  LDS	R2,count
    025E 9030048B  LDS	R3,count+1
    0260 2022      TST	R2
    0261 F411      BNE	0x0264
    0262 2033      TST	R3
    0263 F3C1      BEQ	0x025C
(0064) 	count--;
    0264 9180048A  LDS	R24,count
    0266 9190048B  LDS	R25,count+1
    0268 9701      SBIW	R24,1
    0269 9390048B  STS	count+1,R25
    026B 9380048A  STS	count,R24
(0065) 	temp=rcv_buf[read_pt++];
    026D 90200086  LDS	R2,read_pt
    026F 90300087  LDS	R3,read_pt+1
    0271 01C1      MOVW	R24,R2
    0272 9601      ADIW	R24,1
    0273 93900087  STS	read_pt+1,R25
    0275 93800086  STS	read_pt,R24
    0277 E88A      LDI	R24,0x8A
    0278 E090      LDI	R25,0
    0279 01F1      MOVW	R30,R2
    027A 0FE8      ADD	R30,R24
    027B 1FF9      ADC	R31,R25
    027C 8100      LDD	R16,Z+0
(0066) 	if (read_pt==1024)
    027D 91800086  LDS	R24,read_pt
    027F 91900087  LDS	R25,read_pt+1
    0281 3080      CPI	R24,0
    0282 E0E4      LDI	R30,4
    0283 079E      CPC	R25,R30
    0284 F431      BNE	0x028B
(0067) 	read_pt=0;
    0285 2422      CLR	R2
    0286 2433      CLR	R3
    0287 92300087  STS	read_pt+1,R3
    0289 92200086  STS	read_pt,R2
(0068) 	return ( temp);
    028B 9508      RET
FILE: E:\Program\gps\lcd.c
(0001) #include <iom32v.h>
(0002) #include <macros.h>
(0003) #include <def.h>
(0004) #include <lcd.h>
(0005) 
(0006) extern  char time[10];
(0007) extern  char status;
(0008) extern	char latitude[9];
(0009) extern	char NSind;
(0010) extern	char longtitude[10];
(0011) extern 	char EWind;
(0012) extern  char date[6];
(0013) unsigned char lcd_display2_buffer[8][21];				//显示缓冲区,共168字节
(0014) unsigned char *lcd_display_wrp;
(0015) unsigned char *lcd_display_rdp; 
(0016) 
(0017) // ASCII 5x7 点的字符
(0018) const unsigned char asc [96][5] =
(0019) {
(0020)     { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
(0021)     { 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
(0022)     { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
(0023)     { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
(0024)     { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
(0025)     { 0xc4, 0xc8, 0x10, 0x26, 0x46 },   // %
(0026)     { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
(0027)     { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
(0028)     { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
(0029)     { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
(0030)     { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
(0031)     { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
(0032)     { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
(0033)     { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
(0034)     { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
(0035)     { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
(0036)     { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
(0037)     { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
(0038)     { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
(0039)     { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
(0040)     { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
(0041)     { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
(0042)     { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
(0043)     { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
(0044)     { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
(0045)     { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
(0046)     { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
(0047)     { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
(0048)     { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
(0049)     { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
(0050)     { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
(0051)     { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
(0052)     { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
(0053)     { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
(0054)     { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
(0055)     { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
(0056)     { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
(0057)     { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
(0058)     { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
(0059)     { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
(0060)     { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
(0061)     { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
(0062)     { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
(0063)     { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
(0064)     { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
(0065)     { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
(0066)     { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
(0067)     { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
(0068)     { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
(0069)     { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
(0070)     { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
(0071)     { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
(0072)     { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
(0073)     { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
(0074)     { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
(0075)     { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
(0076)     { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
(0077)     { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
(0078)     { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
(0079)     { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
(0080)     { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
(0081)     { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
(0082)     { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
(0083)     { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
(0084)     { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
(0085)     { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
(0086)     { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
(0087)     { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
(0088)     { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
(0089)     { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
(0090)     { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
(0091)     { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
(0092)     { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
(0093)     { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
(0094)     { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
(0095)     { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
(0096)     { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
(0097)     { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
(0098)     { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
(0099)     { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
(0100)     { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
(0101)     { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
(0102)     { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
(0103)     { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
(0104)     { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
(0105)     { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
(0106)     { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
(0107)     { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
(0108)     { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
(0109)     { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
(0110)     { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
(0111) 	{ 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
(0112) 	{ 0x00, 0x00, 0x7f, 0x00, 0x00 },   // |
(0113) 	{ 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
(0114) 	{ 0x04, 0x02, 0x04, 0x08, 0x04 },   // ~
(0115) 	{ 0x00, 0x00, 0x00, 0x00, 0x00 },   // del 
(0116) };
(0117) 
(0118) unsigned char temp_i;
(0119) //声明全局变量
(0120) 
(0121) void display(void)
(0122) {
(0123)     Write_time();
_display:
    028C D005      RCALL	_Write_time
(0124) 	Write_latitude();
    028D D06E      RCALL	_Write_latitude
(0125) 	Write_longtitude();
    028E D0E9      RCALL	_Write_longtitude
(0126) 	Write_date();
    028F D16B      RCALL	_Write_date
(0127) 
(0128) 	lcd_display2();
    0290 D374      RCALL	_lcd_display2
    0291 9508      RET
(0129) }
(0130) 
(0131) 
(0132) /*******************************************************
(0133)             display every item
(0134)   incluede display time ,data,latitude N/S,longtitude E/W
(0135)   
(0136) ********************************************************/
(0137) 
(0138) //write time to lcd buffer
(0139) void Write_time(void)
(0140) {
(0141)    
(0142) 	char*  aptr;
(0143) 	int i;
(0144) 	
(0145) 	aptr=time;
_Write_time:
  i                    --> Y+1
  aptr                 --> R16
    0292 E70C      LDI	R16,0x7C
    0293 E010      LDI	R17,0
(0146) 		
(0147) 	lcd_display_wrp=&lcd_display2_buffer[1][1];
    0294 EA87      LDI	R24,0xA7
    0295 E094      LDI	R25,4
    0296 93900490  STS	lcd_display_wrp+1,R25
    0298 9380048F  STS	lcd_display_wrp,R24
(0148)  	*lcd_display_wrp++='T';
    029A E584      LDI	R24,0x54
    029B 91E0048F  LDS	R30,lcd_display_wrp
    029D 91F00490  LDS	R31,lcd_display_wrp+1
    029F 9381      ST	R24,Z+
    02A0 93F00490  STS	lcd_display_wrp+1,R31
    02A2 93E0048F  STS	lcd_display_wrp,R30
(0149)  	*lcd_display_wrp++='I';
    02A4 E489      LDI	R24,0x49
    02A5 9381      ST	R24,Z+
    02A6 93F00490  STS	lcd_display_wrp+1,R31
    02A8 93E0048F  STS	lcd_display_wrp,R30
(0150)  	*lcd_display_wrp++='M';
    02AA E48D      LDI	R24,0x4D
    02AB 9381      ST	R24,Z+
    02AC 93F00490  STS	lcd_display_wrp+1,R31
    02AE 93E0048F  STS	lcd_display_wrp,R30
(0151) 	*lcd_display_wrp++='E';
    02B0 E485      LDI	R24,0x45
    02B1 9381      ST	R24,Z+
    02B2 93F00490  STS	lcd_display_wrp+1,R31
    02B4 93E0048F  STS	lcd_display_wrp,R30
(0152)  	*lcd_display_wrp++=':';
    02B6 E38A      LDI	R24,0x3A
    02B7 9381      ST	R24,Z+
    02B8 93F00490  STS	lcd_display_wrp+1,R31
    02BA 93E0048F  STS	lcd_display_wrp,R30
(0153) 
(0154) 	*lcd_display_wrp++=time[0];
    02BC 9020007C  LDS	R2,time
    02BE 9221      ST	R2,Z+
    02BF 93F00490  STS	lcd_display_wrp+1,R31
    02C1 93E0048F  STS	lcd_display_wrp,R30
(0155) 	*lcd_display_wrp++=time[1];
    02C3 9020007D  LDS	R2,time+1
    02C5 9221      ST	R2,Z+
    02C6 93F00490  STS	lcd_display_wrp+1,R31
    02C8 93E0048F  STS	lcd_display_wrp,R30
(0156) 	*lcd_display_wrp++=':';
    02CA 9381      ST	R24,Z+
    02CB 93F00490  STS	lcd_display_wrp+1,R31
    02CD 93E0048F  STS	lcd_display_wrp,R30
(0157) 	*lcd_display_wrp++=time[2];
    02CF 9020007E  LDS	R2,time+2
    02D1 9221      ST	R2,Z+
    02D2 93F00490  STS	lcd_display_wrp+1,R31
    02D4 93E0048F  STS	lcd_display_wrp,R30
(0158) 	*lcd_display_wrp++=time[3];
    02D6 9020007F  LDS	R2,time+3
    02D8 9221      ST	R2,Z+
    02D9 93F00490  STS	lcd_display_wrp+1,R31
    02DB 93E0048F  STS	lcd_display_wrp,R30
(0159) 	*lcd_display_wrp++=':';
    02DD 9381      ST	R24,Z+
    02DE 93F00490  STS	lcd_display_wrp+1,R31
    02E0 93E0048F  STS	lcd_display_wrp,R30
(0160) 	*lcd_display_wrp++=time[4];
    02E2 90200080  LDS	R2,0x80
    02E4 9221      ST	R2,Z+
    02E5 93F00490  STS	lcd_display_wrp+1,R31
    02E7 93E0048F  STS	lcd_display_wrp,R30
(0161) 	*lcd_display_wrp++=time[5];
    02E9 90200081  LDS	R2,0x81
    02EB 9221      ST	R2,Z+
    02EC 93F00490  STS	lcd_display_wrp+1,R31
    02EE 93E0048F  STS	lcd_display_wrp,R30
(0162)     
(0163)  	lcd_display_wrp=&lcd_display2_buffer[0][0];
    02F0 E981      LDI	R24,0x91
    02F1 E094      LDI	R25,4
    02F2 93900490  STS	lcd_display_wrp+1,R25
    02F4 9380048F  STS	lcd_display_wrp,R24
(0164)  	lcd_display_rdp=&lcd_display2_buffer[0][0];
    02F6 9390048E  STS	lcd_display_rdp+1,R25
    02F8 9380048D  STS	lcd_display_rdp,R24
(0165)  	SEI();
    02FA 9478      BSET	7
    02FB 9508      RET
(0166) 
(0167) }
(0168) 
(0169) //write latitude to lcd buffer
(0170) void Write_latitude(void)
(0171) {
(0172)    
(0173) 	char*  aptr;
(0174) 	int i;
(0175) 	
(0176) 	aptr=time;
_Write_latitude:
  i                    --> Y+1
  aptr                 --> R16
    02FC E70C      LDI	R16,0x7C
    02FD E010      LDI	R17,0
(0177) 		
(0178) 	lcd_display_wrp=&lcd_display2_buffer[2][1];

⌨️ 快捷键说明

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