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

📄 gsm_m22.lst

📁 单片机控制GSM22来工作
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    00C0 E5CF      LDI	R28,0x5F
    00C1 E0D4      LDI	R29,4
    00C2 BFCD      OUT	0x3D,R28
    00C3 BFDE      OUT	0x3E,R29
    00C4 51C0      SUBI	R28,0x10
    00C5 40D0      SBCI	R29,0
    00C6 EA0A      LDI	R16,0xAA
    00C7 8308      STD	Y+0,R16
    00C8 2400      CLR	R0
    00C9 E4ED      LDI	R30,0x4D
    00CA E0F1      LDI	R31,1
    00CB E011      LDI	R17,1
    00CC 34ED      CPI	R30,0x4D
    00CD 07F1      CPC	R31,R17
    00CE F011      BEQ	0x00D1
    00CF 9201      ST	R0,Z+
    00D0 CFFB      RJMP	0x00CC
    00D1 8300      STD	Z+0,R16
    00D2 E9E2      LDI	R30,0x92
    00D3 E0F0      LDI	R31,0
    00D4 E6A0      LDI	R26,0x60
    00D5 E0B0      LDI	R27,0
    00D6 E011      LDI	R17,1
    00D7 37EF      CPI	R30,0x7F
    00D8 07F1      CPC	R31,R17
    00D9 F021      BEQ	0x00DE
    00DA 95C8      LPM
    00DB 9631      ADIW	R30,1
    00DC 920D      ST	R0,X+
    00DD CFF9      RJMP	0x00D7
    00DE 940E04AA  CALL	_main
_exit:
    00E0 CFFF      RJMP	_exit
FILE: E:\单片机\AVR程序\GSM_M22\12864.h
(0001) /***************************************************************************************************
(0002)                                        宏定义
(0003) ****************************************************************************************************/
(0004) 
(0005) #define uchar	unsigned char
(0006) #define uint	unsigned int
(0007) 
(0008) //串行通信 
(0009)         
(0010) #define PORT    PORTA  //选择引脚口
(0011) 
(0012) #define setRS    PORT|=(1<<1)   //串行的片选信号
(0013) #define clearRS  PORT&=~(1<<1) 
(0014) 
(0015) #define setRW    PORT|=(1<<2)   //串行的数据口
(0016) #define clearRW  PORT&=~(1<<2)
(0017) 
(0018) #define setCKL   PORT|=(1<<3),delay_nus(1)  //串行的同步时钟
(0019) #define clearCKL PORT&=~(1<<3),delay_nus(1)
(0020)                     
(0021) #define Clear 	WriteCommand(0x01),delay_nms(5)  //清屏
(0022) 
(0023) 
(0024) 
(0025) /*-----------------------------------------------------------------------
(0026) 延时函数
(0027) 系统时钟:8M
(0028) -----------------------------------------------------------------------*/
(0029) void delay_1us(void)                 //1us延时函数
(0030)   {
(0031)    asm("nop");
_delay_1us:
    00E1 0000      NOP
    00E2 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    00E3 940E0538  CALL	push_gset2
    00E5 01B8      MOVW	R22,R16
(0032)   }
(0033) void delay_nus(unsigned int n)       //N us延时函数
(0034)   {
(0035)    unsigned int i=0;
    00E6 2744      CLR	R20
    00E7 2755      CLR	R21
(0036)    for (i=0;i<n;i++)
    00E8 C003      RJMP	0x00EC
(0037)    delay_1us();
    00E9 DFF7      RCALL	_delay_1us
    00EA 5F4F      SUBI	R20,0xFF
    00EB 4F5F      SBCI	R21,0xFF
    00EC 1746      CP	R20,R22
    00ED 0757      CPC	R21,R23
    00EE F3D0      BCS	0x00E9
    00EF 940E0526  CALL	pop_gset2
    00F1 9508      RET
(0038)   }
(0039) void delay_1ms(void)                 //1ms延时函数
(0040)   {
(0041)    unsigned int i;
(0042)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    00F2 2700      CLR	R16
    00F3 2711      CLR	R17
    00F4 C002      RJMP	0x00F7
    00F5 5F0F      SUBI	R16,0xFF
    00F6 4F1F      SBCI	R17,0xFF
    00F7 3704      CPI	R16,0x74
    00F8 E0E4      LDI	R30,4
    00F9 071E      CPC	R17,R30
    00FA F3D0      BCS	0x00F5
    00FB 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    00FC 940E0538  CALL	push_gset2
    00FE 01B8      MOVW	R22,R16
(0043)   }
(0044) void delay_nms(unsigned int n)       //N ms延时函数
(0045)   {
(0046)    unsigned int i=0;
    00FF 2744      CLR	R20
    0100 2755      CLR	R21
(0047)    for (i=0;i<n;i++)
    0101 C003      RJMP	0x0105
(0048)    delay_1ms();
    0102 DFEF      RCALL	_delay_1ms
    0103 5F4F      SUBI	R20,0xFF
    0104 4F5F      SBCI	R21,0xFF
    0105 1746      CP	R20,R22
    0106 0757      CPC	R21,R23
    0107 F3D0      BCS	0x0102
    0108 940E0526  CALL	pop_gset2
    010A 9508      RET
_send_8bit:
  i                    --> R20
  ch                   --> R22
    010B 940E0538  CALL	push_gset2
    010D 2F60      MOV	R22,R16
(0049)   }
(0050) /*-----------------------------------------------------------------------
(0051) 延时函数
(0052) 系统时钟:8M
(0053) -----------------------------------------------------------------------*/
(0054) 
(0055) 
(0056) //发送8位数据
(0057) void send_8bit(uchar ch)
(0058) {
(0059)  char i;
(0060)  for(i=0;i<8;i++)
    010E 2744      CLR	R20
    010F C013      RJMP	0x0123
(0061)  {  setCKL;
    0110 9ADB      SBI	0x1B,3
    0111 E001      LDI	R16,1
    0112 E010      LDI	R17,0
    0113 DFCF      RCALL	_delay_nus
(0062)     if((ch<<i)&0x80)setRW;
    0114 2F06      MOV	R16,R22
    0115 2F14      MOV	R17,R20
    0116 940E056E  CALL	lsl8
    0118 2F80      MOV	R24,R16
    0119 7880      ANDI	R24,0x80
    011A F011      BEQ	0x011D
    011B 9ADA      SBI	0x1B,2
    011C C001      RJMP	0x011E
(0063) 	else clearRW; 
    011D 98DA      CBI	0x1B,2
(0064) 	clearCKL;
    011E 98DB      CBI	0x1B,3
    011F E001      LDI	R16,1
    0120 E010      LDI	R17,0
    0121 DFC1      RCALL	_delay_nus
    0122 9543      INC	R20
    0123 3048      CPI	R20,0x8
    0124 F358      BCS	0x0110
    0125 940E0526  CALL	pop_gset2
    0127 9508      RET
_WriteData:
  data                 --> R20
    0128 940E053A  CALL	push_gset1
    012A 2F40      MOV	R20,R16
(0065)  }
(0066) }
(0067) //写数据
(0068) void WriteData(uchar data)//
(0069) {
(0070)   setRS;
    012B 9AD9      SBI	0x1B,1
(0071)   send_8bit(0xfa);
    012C EF0A      LDI	R16,0xFA
    012D DFDD      RCALL	_send_8bit
(0072)   send_8bit(data&0xf0);
    012E 2F04      MOV	R16,R20
    012F 7F00      ANDI	R16,0xF0
    0130 DFDA      RCALL	_send_8bit
(0073)   send_8bit(data<<4);
    0131 2F04      MOV	R16,R20
    0132 700F      ANDI	R16,0xF
    0133 9502      SWAP	R16
    0134 DFD6      RCALL	_send_8bit
(0074)   clearRS;  
    0135 98D9      CBI	0x1B,1
    0136 940E053D  CALL	pop_gset1
    0138 9508      RET
_WriteCommand:
  command              --> R20
    0139 940E053A  CALL	push_gset1
    013B 2F40      MOV	R20,R16
(0075) }
(0076) //写地址
(0077) void WriteCommand(uchar command)//
(0078) { 
(0079)   setRS;
    013C 9AD9      SBI	0x1B,1
(0080)   send_8bit(0xf8);
    013D EF08      LDI	R16,0xF8
    013E DFCC      RCALL	_send_8bit
(0081)   send_8bit(command&0xf0);
    013F 2F04      MOV	R16,R20
    0140 7F00      ANDI	R16,0xF0
    0141 DFC9      RCALL	_send_8bit
(0082)   send_8bit(command<<4);
    0142 2F04      MOV	R16,R20
    0143 700F      ANDI	R16,0xF
    0144 9502      SWAP	R16
    0145 DFC5      RCALL	_send_8bit
(0083)   clearRS;
    0146 98D9      CBI	0x1B,1
    0147 940E053D  CALL	pop_gset1
    0149 9508      RET
_guangbiao:
  x                    --> R20
    014A 940E053A  CALL	push_gset1
    014C 2F40      MOV	R20,R16
(0084) }
(0085) //光标开关,1开,0关
(0086) void guangbiao(uchar x) //
(0087) {
(0088)   if(x==1) WriteCommand(0x0c|0x03);
    014D 3041      CPI	R20,1
    014E F419      BNE	0x0152
    014F E00F      LDI	R16,0xF
    0150 DFE8      RCALL	_WriteCommand
    0151 C002      RJMP	0x0154
(0089)   else  WriteCommand(0x0c);
    0152 E00C      LDI	R16,0xC
    0153 DFE5      RCALL	_WriteCommand
    0154 940E053D  CALL	pop_gset1
    0156 9508      RET
_Set_display_Adress:
  address              --> R20
  x                    --> R22
  y                    --> R20
    0157 940E0538  CALL	push_gset2
    0159 2F62      MOV	R22,R18
    015A 2F40      MOV	R20,R16
(0090) }
(0091) 
(0092) //  设置显示坐标:y行,x列
(0093) void Set_display_Adress(uchar y,uchar x)//
(0094) {
(0095)  uchar address;
(0096)  switch(y)
    015B 2755      CLR	R21
    015C 3040      CPI	R20,0
    015D 0745      CPC	R20,R21
    015E F069      BEQ	0x016C
    015F 3041      CPI	R20,1
    0160 E0E0      LDI	R30,0
    0161 075E      CPC	R21,R30
    0162 F061      BEQ	0x016F
    0163 3042      CPI	R20,2
    0164 E0E0      LDI	R30,0
    0165 075E      CPC	R21,R30
    0166 F059      BEQ	0x0172
    0167 3043      CPI	R20,3
    0168 E0E0      LDI	R30,0
    0169 075E      CPC	R21,R30
    016A F051      BEQ	0x0175
    016B C00B      RJMP	0x0177
(0097)  {
(0098)  case 0:
(0099) 	address=0x80+x;
    016C 2F46      MOV	R20,R22
    016D 5840      SUBI	R20,0x80
(0100) 	break;
    016E C008      RJMP	0x0177
(0101)  case 1:
(0102) 	address=0x90+x;
    016F 2F46      MOV	R20,R22
    0170 5740      SUBI	R20,0x70
(0103) 	break;
    0171 C005      RJMP	0x0177
(0104)  case 2:
(0105) 	address=0x88+x;
    0172 2F46      MOV	R20,R22
    0173 5748      SUBI	R20,0x78
(0106) 	break;
    0174 C002      RJMP	0x0177
(0107)  case 3:
(0108) 	address=0x98+x;
    0175 2F46      MOV	R20,R22
    0176 5648      SUBI	R20,0x68
(0109) 	break;
(0110) 	}
(0111) 	WriteCommand(address);
    0177 2F04      MOV	R16,R20
    0178 DFC0      RCALL	_WriteCommand
    0179 940E0526  CALL	pop_gset2
    017B 9508      RET
_display_String:
  i                    --> R20
  s                    --> R22
  x                    --> R10
  y                    --> R12
    017C 940E0532  CALL	push_gset5
    017E 2EA2      MOV	R10,R18
    017F 2EC0      MOV	R12,R16
    0180 856A      LDD	R22,Y+10
    0181 857B      LDD	R23,Y+11
(0112) }
(0113) //显示字符串
(0114) void display_String(uchar y,uchar x,uchar *s)   //
(0115) {
(0116)   uchar i=0;
    0182 2744      CLR	R20

⌨️ 快捷键说明

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