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

📄 zz.lst

📁 avr基础程序大全
💻 LST
📖 第 1 页 / 共 2 页
字号:
Interrupt Vectors
    00000 940C 004B JMP	__text_start|__start

Program Code (text area)
__text_start|__start:
    0004B E5CF      LDI	R28,0x5F
    0004C E0D4      LDI	R29,4
    0004D BFCD      OUT	0x3D,R28
    0004E BFDE      OUT	0x3E,R29
    0004F 51C0      SUBI	R28,0x10
    00050 40D0      SBCI	R29,0
    00051 EA0A      LDI	R16,0xAA
    00052 8308      ST	Y,R16
    00053 2400      CLR	R0
    00054 E9EE      LDI	R30,0x9E
    00055 E0F0      LDI	R31,0
    00056 E010      LDI	R17,0
    00057 39EE      CPI	R30,0x9E
    00058 07F1      CPC	R31,R17
    00059 F011      BEQ	0x005C
    0005A 9201      ST	Z+,R0
    0005B CFFB      RJMP	0x0057
    0005C 8300      ST	Z,R16
    0005D E5E8      LDI	R30,0x58
    0005E E0F0      LDI	R31,0
    0005F E6A0      LDI	R26,0x60
    00060 E0B0      LDI	R27,0
    00061 E010      LDI	R17,0
    00062 E000      LDI	R16,0
    00063 BF0B      OUT	0x3B,R16
    00064 39E6      CPI	R30,0x96
    00065 07F1      CPC	R31,R17
    00066 F021      BEQ	0x006B
    00067 95C8      LPM
    00068 9631      ADIW	R30,1
    00069 920D      ST	X+,R0
    0006A CFF9      RJMP	0x0064
    0006B 940E 015A CALL	_main
_exit:
    0006D CFFF      RJMP	_exit
FILE: F:\新学习板程序\avr程序\181286~1\12864_~1\12864.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) 
(0006) #define clk 7
(0007) #define set_clk PORTC |= BIT(clk)	  
(0008) #define clr_clk PORTC &= ~BIT(clk)   
(0009) 
(0010) #define sid 6
(0011) #define clr_sid PORTC &= ~BIT(sid)  
(0012) #define set_sid PORTC |= BIT(sid)     
(0013) 
(0014) void delay()
(0015) {
(0016) 	NOP();
_delay:
    0006E 0000      NOP
(0017) 	NOP();
    0006F 0000      NOP
    00070 9508      RET
(0018) }
(0019) void delay_us(uint i)
(0020) {
(0021) 	while(i--)
_delay_us:
  i                    --> R16
    00071 0118      MOVW	R2,R16
    00072 5001      SUBI	R16,1
    00073 4010      SBCI	R17,0
    00074 2022      TST	R2
    00075 F7D9      BNE	0x0071
    00076 2033      TST	R3
    00077 F7C9      BNE	0x0071
    00078 9508      RET
_delay_ms:
  a                    --> R20
  i                    --> R16
    00079 934A      ST	-Y,R20
    0007A 935A      ST	-Y,R21
(0022) 	 {;}
(0023) }
(0024) void delay_ms(uint i)
(0025) {
(0026) 	uint a;
(0027) 	for(;i;i--)
    0007B C00B      RJMP	0x0087
(0028) 		{
(0029) 		for(a=0;a<672;a++);
    0007C 2744      CLR	R20
    0007D 2755      CLR	R21
    0007E C002      RJMP	0x0081
    0007F 5F4F      SUBI	R20,0xFF
    00080 4F5F      SBCI	R21,0xFF
    00081 3A40      CPI	R20,0xA0
    00082 E0E2      LDI	R30,2
    00083 075E      CPC	R21,R30
    00084 F3D0      BCS	0x007F
    00085 5001      SUBI	R16,1
    00086 4010      SBCI	R17,0
    00087 3000      CPI	R16,0
    00088 0701      CPC	R16,R17
    00089 F791      BNE	0x007C
    0008A 9159      LD	R21,Y+
    0008B 9149      LD	R20,Y+
    0008C 9508      RET
_wr_bit:
  data                 --> R10
  n                    --> R12
    0008D 92AA      ST	-Y,R10
    0008E 92CA      ST	-Y,R12
    0008F 2EA2      MOV	R10,R18
    00090 2EC0      MOV	R12,R16
(0030) 		}
(0031) }
(0032) void wr_bit(uchar n,uchar data)
(0033) {
(0034) 	for(;n;n--)	  		  	   		//写入位数
    00091 C00B      RJMP	0x009D
(0035) 		{
(0036) 		if(data&0x80)				 
    00092 FEA7      SBRS	R10,7
    00093 C002      RJMP	0x0096
(0037) 			{set_sid;}
    00094 9AAE      SBI	0x15,6
    00095 C001      RJMP	0x0097
(0038) 		else
(0039) 			{clr_sid;}
    00096 98AE      CBI	0x15,6
(0040) 		data=data<<1;	  			 
    00097 0CAA      LSL	R10
(0041) 		delay();
    00098 DFD5      RCALL	_delay
(0042) 		set_clk;				 
    00099 9AAF      SBI	0x15,7
(0043) 		delay();
    0009A DFD3      RCALL	_delay
(0044) 		clr_clk;
    0009B 98AF      CBI	0x15,7
    0009C 94CA      DEC	R12
    0009D 20CC      TST	R12
    0009E F799      BNE	0x0092
    0009F 90C9      LD	R12,Y+
    000A0 90A9      LD	R10,Y+
    000A1 9508      RET
_write_shuju:
  b                    --> R20
  a                    --> R10
    000A2 92AA      ST	-Y,R10
    000A3 934A      ST	-Y,R20
    000A4 2F42      MOV	R20,R18
    000A5 2EA0      MOV	R10,R16
(0045) 		}
(0046) }
(0047) void write_shuju(uchar a,uchar b)
(0048) {
(0049) 	clr_clk;
    000A6 98AF      CBI	0x15,7
(0050) 
(0051) 	wr_bit(5,0xFF);			  		 
    000A7 EF2F      LDI	R18,0xFF
    000A8 E005      LDI	R16,5
    000A9 DFE3      RCALL	_wr_bit
(0052) 
(0053) 	wr_bit(1,0x00);	 				 
    000AA 2722      CLR	R18
    000AB E001      LDI	R16,1
    000AC DFE0      RCALL	_wr_bit
(0054) 	
(0055) 	if(a==0)	 					 
    000AD 20AA      TST	R10
    000AE F421      BNE	0x00B3
(0056) 		wr_bit(1,0x00);				 
    000AF 2722      CLR	R18
    000B0 E001      LDI	R16,1
    000B1 DFDB      RCALL	_wr_bit
    000B2 C003      RJMP	0x00B6
(0057) 	else
(0058) 		wr_bit(1,0x80);				 
    000B3 E820      LDI	R18,0x80
    000B4 E001      LDI	R16,1
    000B5 DFD7      RCALL	_wr_bit
(0059) 
(0060) 	wr_bit(1,0x00);	 				//写入一个0
    000B6 2722      CLR	R18
    000B7 E001      LDI	R16,1
    000B8 DFD4      RCALL	_wr_bit
(0061) 	
(0062) 	wr_bit(4,b);					//写入数据的高4位
    000B9 2F24      MOV	R18,R20
    000BA E004      LDI	R16,4
    000BB DFD1      RCALL	_wr_bit
(0063) 	
(0064) 	wr_bit(4,0x00);					//写入4个0
    000BC 2722      CLR	R18
    000BD E004      LDI	R16,4
    000BE DFCE      RCALL	_wr_bit
(0065) 	
(0066) 	wr_bit(4,(b<<4));				//写入数据的低4位
    000BF 2F24      MOV	R18,R20
    000C0 702F      ANDI	R18,0xF
    000C1 9522      SWAP	R18
    000C2 E004      LDI	R16,4
    000C3 DFC9      RCALL	_wr_bit
(0067) 	
(0068) 	wr_bit(4,0x00);					//写入4个0
    000C4 2722      CLR	R18
    000C5 E004      LDI	R16,4
    000C6 DFC6      RCALL	_wr_bit
(0069) 
(0070) 	set_sid;					  
    000C7 9AAE      SBI	0x15,6
    000C8 9149      LD	R20,Y+
    000C9 90A9      LD	R10,Y+
    000CA 9508      RET
(0071) }
(0072) void lcd12864_init()
(0073) {
(0074) 	write_shuju(0,0x30);			//设置数据方式:8位
_lcd12864_init:
    000CB E320      LDI	R18,0x30
    000CC 2700      CLR	R16
    000CD DFD4      RCALL	_write_shuju
(0075) 	delay_us(200);
    000CE EC08      LDI	R16,0xC8
    000CF E010      LDI	R17,0
    000D0 DFA0      RCALL	_delay_us
(0076) 	write_shuju(0,0x30);			//设置数据方式:8位
    000D1 E320      LDI	R18,0x30
    000D2 2700      CLR	R16
    000D3 DFCE      RCALL	_write_shuju
(0077) 	delay_us(80);
    000D4 E500      LDI	R16,0x50
    000D5 E010      LDI	R17,0
    000D6 DF9A      RCALL	_delay_us
(0078) 	write_shuju(0,0x0C);			//开显示
    000D7 E02C      LDI	R18,0xC
    000D8 2700      CLR	R16
    000D9 DFC8      RCALL	_write_shuju
(0079) 	delay_us(80);
    000DA E500      LDI	R16,0x50
    000DB E010      LDI	R17,0
    000DC DF94      RCALL	_delay_us
(0080) 	write_shuju(0,0x40);			//开显示
    000DD E420      LDI	R18,0x40
    000DE 2700      CLR	R16
    000DF DFC2      RCALL	_write_shuju
(0081) 	delay_us(200);
    000E0 EC08      LDI	R16,0xC8
    000E1 E010      LDI	R17,0
    000E2 DF8E      RCALL	_delay_us
(0082) 	write_shuju(0,0x01);			//清屏
    000E3 E021      LDI	R18,1
    000E4 2700      CLR	R16
    000E5 DFBC      RCALL	_write_shuju
(0083) 	delay_ms(100);
    000E6 E604      LDI	R16,0x64
    000E7 E010      LDI	R17,0
    000E8 CF90      RJMP	_delay_ms
_write_hz:
  s                    --> R20
    000E9 934A      ST	-Y,R20
    000EA 935A      ST	-Y,R21
    000EB 01A8      MOVW	R20,R16
(0084) 
(0085) }
(0086) void write_hz(char *s)
(0087)    {
    000EC C006      RJMP	0x00F3
(0088) 	while(*s)
(0089) 	    {
(0090) 		write_shuju(1,*s);
    000ED 01FA      MOVW	R30,R20
    000EE 8120      LD	R18,Z
    000EF E001      LDI	R16,1
    000F0 DFB1      RCALL	_write_shuju
(0091) 		s++;
    000F1 5F4F      SUBI	R20,0xFF
    000F2 4F5F      SBCI	R21,0xFF
    000F3 01FA      MOVW	R30,R20
    000F4 8020      LD	R2,Z
    000F5 2022      TST	R2
    000F6 F7B1      BNE	0x00ED
    000F7 9159      LD	R21,Y+
    000F8 9149      LD	R20,Y+
    000F9 9508      RET
_locate:
  y                    --> R20
  x                    --> R10
    000FA 940E 01F6 CALL	push_xgsetF00C
    000FC 2F42      MOV	R20,R18
    000FD 2EA0      MOV	R10,R16
(0092) 		}
(0093) }
(0094) void locate(uchar x,uchar y)
(0095) {
(0096) 	switch(x)
    000FE 2D6A      MOV	R22,R10
    000FF 2777      CLR	R23
    00100 3061      CPI	R22,1
    00101 E0E0      LDI	R30,0
    00102 077E      CPC	R23,R30
    00103 F069      BEQ	0x0111
    00104 3062      CPI	R22,2
    00105 E0E0      LDI	R30,0
    00106 077E      CPC	R23,R30
    00107 F079      BEQ	0x0117
    00108 3063      CPI	R22,3
    00109 E0E0      LDI	R30,0
    0010A 077E      CPC	R23,R30
    0010B F089      BEQ	0x011D
    0010C 3064      CPI	R22,4
    0010D E0E0      LDI	R30,0
    0010E 077E      CPC	R23,R30
    0010F F099      BEQ	0x0123
    00110 C017      RJMP	0x0128
(0097) 		{
(0098) 		case 1:write_shuju(0,(0x80+y-1)); break;
    00111 2F24      MOV	R18,R20
    00112 5820      SUBI	R18,0x80
    00113 5021      SUBI	R18,1
    00114 2700      CLR	R16
    00115 DF8C      RCALL	_write_shuju
    00116 C011      RJMP	0x0128
(0099) 		case 2:write_shuju(0,(0x90+y-1));break;
    00117 2F24      MOV	R18,R20
    00118 5720      SUBI	R18,0x70
    00119 5021      SUBI	R18,1
    0011A 2700      CLR	R16
    0011B DF86      RCALL	_write_shuju
    0011C C00B      RJMP	0x0128
(0100) 		case 3:write_shuju(0,(0x88+y-1));break;	
    0011D 2F24      MOV	R18,R20
    0011E 5728      SUBI	R18,0x78
    0011F 5021      SUBI	R18,1
    00120 2700      CLR	R16
    00121 DF80      RCALL	_write_shuju
    00122 C005      RJMP	0x0128
(0101) 		case 4:write_shuju(0,(0x98+y-1));break;
    00123 2F24      MOV	R18,R20
    00124 5628      SUBI	R18,0x68
    00125 5021      SUBI	R18,1
    00126 2700      CLR	R16
    00127 DF7A      RCALL	_write_shuju
(0102) 		default:break;		 
    00128 940C 01FD JMP	pop_xgsetF00C
(0103) 		}
(0104) }
(0105) void cls()
(0106) {
(0107) 	delay_us(200);
_cls:
    0012A EC08      LDI	R16,0xC8
    0012B E010      LDI	R17,0
    0012C DF44      RCALL	_delay_us
(0108) 	write_shuju(0,0x01);			//清屏
    0012D E021      LDI	R18,1
    0012E 2700      CLR	R16
    0012F DF72      RCALL	_write_shuju
(0109) 	delay_ms(20);
    00130 E104      LDI	R16,0x14
    00131 E010      LDI	R17,0
    00132 CF46      RJMP	_delay_ms
_mega16_adc:
  addata               --> R10
    00133 92AA      ST	-Y,R10
    00134 92BA      ST	-Y,R11
FILE: F:\新学习板程序\avr程序\181286~1\12864_~1\adc.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) uint mega16_adc()
(0006) {
(0007)      uint addata;
(0008) 	 DDRA&=~BIT(0);
    00135 98D0      CBI	0x1A,0
(0009) 	 PORTA&=~BIT(0);
    00136 98D8      CBI	0x1B,0
(0010) 	 ADMUX=0x40;
    00137 E480      LDI	R24,0x40
    00138 B987      OUT	0x07,R24
(0011) 	 ADCSR=0X80;
    00139 E880      LDI	R24,0x80
    0013A B986      OUT	0x06,R24
(0012) 	 ADCSR|=BIT(6);
    0013B 9A36      SBI	0x06,6
(0013) 	 while(!(ADCSR&(BIT(4))));
    0013C 9B34      SBIS	0x06,4
    0013D CFFE      RJMP	0x013C
(0014)      addata=ADCL;
    0013E B0A4      IN	R10,0x04
    0013F 24BB      CLR	R11
(0015) 	 addata=addata+ADCH*256;
    00140 B125      IN	R18,0x05
    00141 2733      CLR	R19
    00142 E000      LDI	R16,0
    00143 E011      LDI	R17,1
    00144 940E 01E6 CALL	empy16s
    00146 0EA0      ADD	R10,R16
    00147 1EB1      ADC	R11,R17
(0016) 	 return addata;
    00148 0185      MOVW	R16,R10
    00149 90B9      LD	R11,Y+
    0014A 90A9      LD	R10,Y+
    0014B 9508      RET
FILE: F:\新学习板程序\avr程序\181286~1\12864_~1\zz.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "12864.h"
(0004) #include "adc.h"
(0005) #define  uchar unsigned char
(0006) #define  uint  unsigned int
(0007) void port_init()
(0008)     {
(0009) 	 DDRD = 0xFF;				
_port_init:
    0014C EF8F      LDI	R24,0xFF
    0014D BB81      OUT	0x11,R24
(0010) 	 PORTD = 0x00;
    0014E 2422      CLR	R2
    0014F BA22      OUT	0x12,R2
(0011) 	 DDRC = 0xFF;	
    00150 BB84      OUT	0x14,R24
(0012) 	 PORTC = 0x00; 
    00151 BA25      OUT	0x15,R2
(0013) 	 DDRA = 0xFE;	
    00152 EF8E      LDI	R24,0xFE
    00153 BB8A      OUT	0x1A,R24
(0014) 	 PORTA = 0x00;
    00154 BA2B      OUT	0x1B,R2
(0015) 	 PORTC|=BIT(2)+BIT(5);
    00155 B385      IN	R24,0x15
    00156 6284      ORI	R24,0x24
    00157 BB85      OUT	0x15,R24
(0016) 	 PORTC&=~BIT(4);
    00158 98AC      CBI	0x15,4
    00159 9508      RET
(0017) 	}    
(0018) void main()
(0019) 	{
(0020) 	uint adc;
(0021) 	port_init();			    
_main:
  adc                  --> R10
    0015A DFF1      RCALL	_port_init
(0022) 	lcd12864_init();
    0015B DF6F      RCALL	_lcd12864_init
(0023) 	cls();					    
    0015C DFCD      RCALL	_cls
(0024) 	delay_ms(2);
    0015D E002      LDI	R16,2
    0015E E010      LDI	R17,0
    0015F DF19      RCALL	_delay_ms
(0025) 	locate(1,3);write_hz("滨州学院");
    00160 E023      LDI	R18,3
    00161 E001      LDI	R16,1
    00162 DF97      RCALL	_locate
    00163 E905      LDI	R16,0x95
    00164 E010      LDI	R17,0
    00165 DF83      RCALL	_write_hz
(0026) 	locate(2,1);write_hz("创新实验室  OK");	  
    00166 E021      LDI	R18,1
    00167 E002      LDI	R16,2
    00168 DF91      RCALL	_locate
    00169 E806      LDI	R16,0x86
    0016A E010      LDI	R17,0
    0016B DF7D      RCALL	_write_hz
(0027) 	locate(3,1);write_hz("ATmega16 ADC学习");	  
    0016C E021      LDI	R18,1
    0016D E003      LDI	R16,3
    0016E DF8B      RCALL	_locate
    0016F E705      LDI	R16,0x75
    00170 E010      LDI	R17,0
    00171 DF77      RCALL	_write_hz
(0028) 	locate(4,1);write_hz("测量电压       V");
    00172 E021      LDI	R18,1
    00173 E004      LDI	R16,4
    00174 DF85      RCALL	_locate
    00175 E604      LDI	R16,0x64
    00176 E010      LDI	R17,0
    00177 DF71      RCALL	_write_hz
    00178 C04F      RJMP	0x01C8
(0029) 	while(1)
(0030) 	   {
(0031) 	      adc=mega16_adc()*4.888;
    00179 DFB9      RCALL	_mega16_adc
    0017A 0138      MOVW	R6,R16
    0017B E504      LDI	R16,0x54
    0017C E010      LDI	R17,0
    0017D 940E 020D CALL	lpm32
    0017F 0118      MOVW	R2,R16

⌨️ 快捷键说明

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