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

📄 12864.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 51CE      SUBI	R28,0x1E
    00050 40D0      SBCI	R29,0
    00051 EA0A      LDI	R16,0xAA
    00052 8308      ST	Y,R16
    00053 2400      CLR	R0
    00054 E9ED      LDI	R30,0x9D
    00055 E0F0      LDI	R31,0
    00056 E010      LDI	R17,0
    00057 39ED      CPI	R30,0x9D
    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 39E5      CPI	R30,0x95
    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 0158 CALL	_main
_exit:
    0006D CFFF      RJMP	_exit
FILE: E:\AVR自编程序\11avr实验板\1812864串口\12864串口.c
(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
(0018) 	NOP();
    00070 0000      NOP
(0019) 	NOP();
    00071 0000      NOP
(0020) 	NOP();
    00072 0000      NOP
    00073 9508      RET
(0021) 	
(0022) }
(0023) void delay_us(uint i)
(0024) {
(0025) 	while(i--)
_delay_us:
  i                    --> R16
    00074 0118      MOVW	R2,R16
    00075 5001      SUBI	R16,1
    00076 4010      SBCI	R17,0
    00077 2022      TST	R2
    00078 F7D9      BNE	0x0074
    00079 2033      TST	R3
    0007A F7C9      BNE	0x0074
    0007B 9508      RET
_delay_ms:
  a                    --> R20
  i                    --> R16
    0007C 934A      ST	-Y,R20
    0007D 935A      ST	-Y,R21
(0026) 	 {;;;;;;;;}
(0027) }
(0028) void delay_ms(uint i)
(0029) {
(0030) 	uint a;
(0031) 	for(;i;i--)
    0007E C00B      RJMP	0x008A
(0032) 		{
(0033) 		for(a=0;a<1141;a++);
    0007F 2744      CLR	R20
    00080 2755      CLR	R21
    00081 C002      RJMP	0x0084
    00082 5F4F      SUBI	R20,0xFF
    00083 4F5F      SBCI	R21,0xFF
    00084 3745      CPI	R20,0x75
    00085 E0E4      LDI	R30,4
    00086 075E      CPC	R21,R30
    00087 F3D0      BCS	0x0082
    00088 5001      SUBI	R16,1
    00089 4010      SBCI	R17,0
    0008A 3000      CPI	R16,0
    0008B 0701      CPC	R16,R17
    0008C F791      BNE	0x007F
    0008D 9159      LD	R21,Y+
    0008E 9149      LD	R20,Y+
    0008F 9508      RET
_wr_bit:
  data                 --> R10
  n                    --> R12
    00090 92AA      ST	-Y,R10
    00091 92CA      ST	-Y,R12
    00092 2EA2      MOV	R10,R18
    00093 2EC0      MOV	R12,R16
(0034) 		}
(0035) }
(0036) void wr_bit(uchar n,uchar data)
(0037) {
(0038) 	for(;n;n--)	  		  	   		//写入位数
    00094 C00B      RJMP	0x00A0
(0039) 		{
(0040) 		if(data&0x80)				 
    00095 FEA7      SBRS	R10,7
    00096 C002      RJMP	0x0099
(0041) 			{set_sid;}
    00097 9AAE      SBI	0x15,6
    00098 C001      RJMP	0x009A
(0042) 		else
(0043) 			{clr_sid;}
    00099 98AE      CBI	0x15,6
(0044) 		data=data<<1;	  			 
    0009A 0CAA      LSL	R10
(0045) 		delay();
    0009B DFD2      RCALL	_delay
(0046) 		set_clk;				 
    0009C 9AAF      SBI	0x15,7
(0047) 		delay();
    0009D DFD0      RCALL	_delay
(0048) 		clr_clk;
    0009E 98AF      CBI	0x15,7
    0009F 94CA      DEC	R12
    000A0 20CC      TST	R12
    000A1 F799      BNE	0x0095
    000A2 90C9      LD	R12,Y+
    000A3 90A9      LD	R10,Y+
    000A4 9508      RET
_write_shuju:
  b                    --> R20
  a                    --> R10
    000A5 92AA      ST	-Y,R10
    000A6 934A      ST	-Y,R20
    000A7 2F42      MOV	R20,R18
    000A8 2EA0      MOV	R10,R16
(0049) 		}
(0050) }
(0051) void write_shuju(uchar a,uchar b)
(0052) {
(0053) 	clr_clk;
    000A9 98AF      CBI	0x15,7
(0054) 
(0055) 	wr_bit(5,0xFF);			  		 
    000AA EF2F      LDI	R18,0xFF
    000AB E005      LDI	R16,5
    000AC DFE3      RCALL	_wr_bit
(0056) 
(0057) 	wr_bit(1,0x00);	 				 
    000AD 2722      CLR	R18
    000AE E001      LDI	R16,1
    000AF DFE0      RCALL	_wr_bit
(0058) 	
(0059) 	if(a==0)	 					 
    000B0 20AA      TST	R10
    000B1 F421      BNE	0x00B6
(0060) 		wr_bit(1,0x00);				 
    000B2 2722      CLR	R18
    000B3 E001      LDI	R16,1
    000B4 DFDB      RCALL	_wr_bit
    000B5 C003      RJMP	0x00B9
(0061) 	else
(0062) 		wr_bit(1,0x80);				 
    000B6 E820      LDI	R18,0x80
    000B7 E001      LDI	R16,1
    000B8 DFD7      RCALL	_wr_bit
(0063) 
(0064) 	wr_bit(1,0x00);	 				//写入一个0
    000B9 2722      CLR	R18
    000BA E001      LDI	R16,1
    000BB DFD4      RCALL	_wr_bit
(0065) 	
(0066) 	wr_bit(4,b);					//写入数据的高4位
    000BC 2F24      MOV	R18,R20
    000BD E004      LDI	R16,4
    000BE DFD1      RCALL	_wr_bit
(0067) 	
(0068) 	wr_bit(4,0x00);					//写入4个0
    000BF 2722      CLR	R18
    000C0 E004      LDI	R16,4
    000C1 DFCE      RCALL	_wr_bit
(0069) 	
(0070) 	wr_bit(4,(b<<4));				//写入数据的低4位
    000C2 2F24      MOV	R18,R20
    000C3 702F      ANDI	R18,0xF
    000C4 9522      SWAP	R18
    000C5 E004      LDI	R16,4
    000C6 DFC9      RCALL	_wr_bit
(0071) 	
(0072) 	wr_bit(4,0x00);					//写入4个0
    000C7 2722      CLR	R18
    000C8 E004      LDI	R16,4
    000C9 DFC6      RCALL	_wr_bit
(0073) 
(0074) 	set_sid;					  
    000CA 9AAE      SBI	0x15,6
    000CB 9149      LD	R20,Y+
    000CC 90A9      LD	R10,Y+
    000CD 9508      RET
(0075) }
(0076) void lcd12864_init()
(0077) {
(0078) 	delay_ms(50);
_lcd12864_init:
    000CE E302      LDI	R16,0x32
    000CF E010      LDI	R17,0
    000D0 DFAB      RCALL	_delay_ms
(0079) 	delay_ms(100);
    000D1 E604      LDI	R16,0x64
    000D2 E010      LDI	R17,0
    000D3 DFA8      RCALL	_delay_ms
(0080) 	delay_ms(200);
    000D4 EC08      LDI	R16,0xC8
    000D5 E010      LDI	R17,0
    000D6 DFA5      RCALL	_delay_ms
(0081) 	
(0082) 	write_shuju(0,0x30);			//设置数据方式:8位
    000D7 E320      LDI	R18,0x30
    000D8 2700      CLR	R16
    000D9 DFCB      RCALL	_write_shuju
(0083) 	delay_us(200);
    000DA EC08      LDI	R16,0xC8
    000DB E010      LDI	R17,0
    000DC DF97      RCALL	_delay_us
(0084) 	write_shuju(0,0x30);			//设置数据方式:8位
    000DD E320      LDI	R18,0x30
    000DE 2700      CLR	R16
    000DF DFC5      RCALL	_write_shuju
(0085) 	delay_us(80);
    000E0 E500      LDI	R16,0x50
    000E1 E010      LDI	R17,0
    000E2 DF91      RCALL	_delay_us
(0086) 	write_shuju(0,0x0C);			//开显示
    000E3 E02C      LDI	R18,0xC
    000E4 2700      CLR	R16
    000E5 DFBF      RCALL	_write_shuju
(0087) 	delay_us(80);
    000E6 E500      LDI	R16,0x50
    000E7 E010      LDI	R17,0
    000E8 DF8B      RCALL	_delay_us
(0088) 	write_shuju(0,0x40);			//开显示
    000E9 E420      LDI	R18,0x40
    000EA 2700      CLR	R16
    000EB DFB9      RCALL	_write_shuju
(0089) 	delay_us(200);
    000EC EC08      LDI	R16,0xC8
    000ED E010      LDI	R17,0
    000EE DF85      RCALL	_delay_us
(0090) 	write_shuju(0,0x01);			//清屏
    000EF E021      LDI	R18,1
    000F0 2700      CLR	R16
    000F1 DFB3      RCALL	_write_shuju
(0091) 	delay_ms(200);
    000F2 EC08      LDI	R16,0xC8
    000F3 E010      LDI	R17,0
    000F4 CF87      RJMP	_delay_ms
_write_hz:
  s                    --> R20
    000F5 934A      ST	-Y,R20
    000F6 935A      ST	-Y,R21
    000F7 01A8      MOVW	R20,R16
(0092) }
(0093) void write_hz(char *s)
(0094)    {
    000F8 C006      RJMP	0x00FF
(0095) 	while(*s)
(0096) 	    {
(0097) 		write_shuju(1,*s);
    000F9 01FA      MOVW	R30,R20
    000FA 8120      LD	R18,Z
    000FB E001      LDI	R16,1
    000FC DFA8      RCALL	_write_shuju
(0098) 		s++;
    000FD 5F4F      SUBI	R20,0xFF
    000FE 4F5F      SBCI	R21,0xFF
    000FF 01FA      MOVW	R30,R20
    00100 8020      LD	R2,Z
    00101 2022      TST	R2
    00102 F7B1      BNE	0x00F9
    00103 9159      LD	R21,Y+
    00104 9149      LD	R20,Y+
    00105 9508      RET
_locate:
  y                    --> R20
  x                    --> R10
    00106 940E 01ED CALL	push_xgsetF00C
    00108 2F42      MOV	R20,R18
    00109 2EA0      MOV	R10,R16
(0099) 		}
(0100) }
(0101) void locate(uchar x,uchar y)
(0102) {
(0103) 	switch(x)
    0010A 2D6A      MOV	R22,R10
    0010B 2777      CLR	R23
    0010C 3061      CPI	R22,1
    0010D E0E0      LDI	R30,0
    0010E 077E      CPC	R23,R30
    0010F F069      BEQ	0x011D
    00110 3062      CPI	R22,2
    00111 E0E0      LDI	R30,0
    00112 077E      CPC	R23,R30
    00113 F079      BEQ	0x0123
    00114 3063      CPI	R22,3
    00115 E0E0      LDI	R30,0
    00116 077E      CPC	R23,R30
    00117 F089      BEQ	0x0129
    00118 3064      CPI	R22,4
    00119 E0E0      LDI	R30,0
    0011A 077E      CPC	R23,R30
    0011B F099      BEQ	0x012F
    0011C C017      RJMP	0x0134
(0104) 		{
(0105) 		case 1:write_shuju(0,(0x80+y-1)); break;
    0011D 2F24      MOV	R18,R20
    0011E 5820      SUBI	R18,0x80
    0011F 5021      SUBI	R18,1
    00120 2700      CLR	R16
    00121 DF83      RCALL	_write_shuju
    00122 C011      RJMP	0x0134
(0106) 		case 2:write_shuju(0,(0x90+y-1));break;
    00123 2F24      MOV	R18,R20
    00124 5720      SUBI	R18,0x70
    00125 5021      SUBI	R18,1
    00126 2700      CLR	R16
    00127 DF7D      RCALL	_write_shuju
    00128 C00B      RJMP	0x0134
(0107) 		case 3:write_shuju(0,(0x88+y-1));break;	
    00129 2F24      MOV	R18,R20
    0012A 5728      SUBI	R18,0x78
    0012B 5021      SUBI	R18,1
    0012C 2700      CLR	R16
    0012D DF77      RCALL	_write_shuju
    0012E C005      RJMP	0x0134
(0108) 		case 4:write_shuju(0,(0x98+y-1));break;
    0012F 2F24      MOV	R18,R20
    00130 5628      SUBI	R18,0x68
    00131 5021      SUBI	R18,1
    00132 2700      CLR	R16
    00133 DF71      RCALL	_write_shuju
(0109) 		default:break;		 
    00134 940C 01F4 JMP	pop_xgsetF00C
(0110) 		}
(0111) }
(0112) void cls()
(0113) {
(0114) 	delay_us(200);
_cls:
    00136 EC08      LDI	R16,0xC8
    00137 E010      LDI	R17,0
    00138 DF3B      RCALL	_delay_us
(0115) 	write_shuju(0,0x01);			//清屏
    00139 E021      LDI	R18,1
    0013A 2700      CLR	R16
    0013B DF69      RCALL	_write_shuju
(0116) 	delay_ms(20);
    0013C E104      LDI	R16,0x14
    0013D E010      LDI	R17,0
    0013E CF3D      RJMP	_delay_ms
_mega16_adc:
  addata               --> R10
    0013F 92AA      ST	-Y,R10
    00140 92BA      ST	-Y,R11
(0117) }
(0118) 
(0119) uint mega16_adc()
(0120) {
(0121)      uint addata;
(0122) 	 DDRA&=~BIT(0);
    00141 98D0      CBI	0x1A,0
(0123) 	 PORTA&=~BIT(0);
    00142 98D8      CBI	0x1B,0
(0124) 	 ADMUX=0x40;
    00143 E480      LDI	R24,0x40
    00144 B987      OUT	0x07,R24
(0125) 	 ADCSR=0X80;
    00145 E880      LDI	R24,0x80
    00146 B986      OUT	0x06,R24
(0126) 	 ADCSR|=BIT(6);
    00147 9A36      SBI	0x06,6
(0127) 	 while(!(ADCSR&(BIT(4))));
    00148 9B34      SBIS	0x06,4
    00149 CFFE      RJMP	0x0148
(0128)      addata=ADCL;
    0014A B0A4      IN	R10,0x04
    0014B 24BB      CLR	R11
(0129) 	 addata=addata+ADCH*256;
    0014C B125      IN	R18,0x05
    0014D 2733      CLR	R19
    0014E E000      LDI	R16,0
    0014F E011      LDI	R17,1
    00150 940E 01DD CALL	empy16s
    00152 0EA0      ADD	R10,R16
    00153 1EB1      ADC	R11,R17
(0130) 	 return addata;
    00154 0185      MOVW	R16,R10
    00155 90B9      LD	R11,Y+
    00156 90A9      LD	R10,Y+
    00157 9508      RET
(0131) } 
(0132) 
(0133) void main()
(0134) 	{
(0135) 	uint adc;
(0136) 	
(0137) 	DDRC|=BIT(5);
_main:
  adc                  --> R10
    00158 9AA5      SBI	0x14,5
(0138) 	 DDRC|=BIT(4);
    00159 9AA4      SBI	0x14,4
(0139) 	 PORTC&=~BIT(4);
    0015A 98AC      CBI	0x15,4
(0140) 	 PORTC|=BIT(5);
    0015B 9AAD      SBI	0x15,5
(0141) 		    
(0142) 	lcd12864_init();
    0015C DF71      RCALL	_lcd12864_init
(0143) 	cls();					    
    0015D DFD8      RCALL	_cls
(0144) 	delay_ms(2);
    0015E E002      LDI	R16,2
    0015F E010      LDI	R17,0
    00160 DF1B      RCALL	_delay_ms
(0145) 	 
(0146) 	locate(1,3);write_hz("滨州学院");
    00161 E023      LDI	R18,3
    00162 E001      LDI	R16,1
    00163 DFA2      RCALL	_locate
    00164 E904      LDI	R16,0x94
    00165 E010      LDI	R17,0
    00166 DF8E      RCALL	_write_hz
(0147) 	locate(2,1);write_hz("创新实验室  OK");	  
    00167 E021      LDI	R18,1
    00168 E002      LDI	R16,2
    00169 DF9C      RCALL	_locate
    0016A E805      LDI	R16,0x85
    0016B E010      LDI	R17,0
    0016C DF88      RCALL	_write_hz
(0148) 	locate(3,1);write_hz("ATmega16 ADC学习");	  
    0016D E021      LDI	R18,1
    0016E E003      LDI	R16,3
    0016F DF96      RCALL	_locate
    00170 E704      LDI	R16,0x74
    00171 E010      LDI	R17,0
    00172 DF82      RCALL	_write_hz
(0149) 	locate(4,1);write_hz("测量电压      V");
    00173 E021      LDI	R18,1
    00174 E004      LDI	R16,4
    00175 DF90      RCALL	_locate
    00176 E604      LDI	R16,0x64
    00177 E010      LDI	R17,0
    00178 DF7C      RCALL	_write_hz
    00179 C045      RJMP	0x01BF
(0150) 	while(1)
(0151) 	   {
(0152) 	      adc=mega16_adc()*4.888;
    0017A DFC4      RCALL	_mega16_adc
    0017B 0138      MOVW	R6,R16
    0017C E504      LDI	R16,0x54
    0017D E010      LDI	R17,0

⌨️ 快捷键说明

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