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

📄 adc.lst

📁 LCD1602来显示通过AVR ADC0采集的信号
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
      52 EFCF      LDI	R28,0xFF
      53 E1D0      LDI	R29,0x10
      54 BFCD      OUT	0x3D,R28
      55 BFDE      OUT	0x3E,R29
      56 51CE      SUBI	R28,0x1E
      57 40D0      SBCI	R29,0
      58 EA0A      LDI	R16,0xAA
      59 8308      STD	Y+0,R16
      5A 2400      CLR	R0
      5B E1E8      LDI	R30,0x18
      5C E0F1      LDI	R31,1
      5D E011      LDI	R17,1
      5E 31E8      CPI	R30,0x18
      5F 07F1      CPC	R31,R17
      60 F011      BEQ	0x0063
      61 9201      ST	R0,Z+
      62 CFFB      RJMP	0x005E
      63 8300      STD	Z+0,R16
      64 E8EC      LDI	R30,0x8C
      65 E0F0      LDI	R31,0
      66 E0A0      LDI	R26,0
      67 E0B1      LDI	R27,1
      68 E010      LDI	R17,0
      69 E000      LDI	R16,0
      6A BF0B      OUT	0x3B,R16
      6B 3AE4      CPI	R30,0xA4
      6C 07F1      CPC	R31,R17
      6D F021      BEQ	0x0072
      6E 95C8      LPM
      6F 9631      ADIW	R30,1
      70 920D      ST	R0,X+
      71 CFF9      RJMP	0x006B
      72 940E 01FF CALL	_main
_exit:
      74 CFFF      RJMP	_exit
FILE: D:\16实验程序\模数转换\adc_1602\1602.h
(0001) #define uchar unsigned char 
(0002) #define uint unsigned int 
(0003) 
(0004) #define RS 5
(0005) #define RW 6
(0006) #define EN 7
(0007) 
(0008) void s_ms(uint ms)
(0009) {
(0010) 	for(;ms>1;ms--);
_s_ms:
  ms                   --> R16
      75 C002      RJMP	0x0078
      76 5001      SUBI	R16,1
      77 4010      SBCI	R17,0
      78 E081      LDI	R24,1
      79 E090      LDI	R25,0
      7A 1780      CP	R24,R16
      7B 0791      CPC	R25,R17
      7C F3C8      BCS	0x0076
      7D 9508      RET
_busy:
  temp                 --> R20
      7E 934A      ST	R20,-Y
(0011) }	
(0012) 
(0013) //查忙
(0014) void busy(void)
(0015) {
(0016)     uchar temp;
(0017) 	s_ms(500);
      7F EF04      LDI	R16,0xF4
      80 E011      LDI	R17,1
      81 DFF3      RCALL	_s_ms
(0018) 	PORTA&=~(1<<RS);    //RS=0
      82 98DD      CBI	0x1B,5
(0019) 	s_ms(500);
      83 EF04      LDI	R16,0xF4
      84 E011      LDI	R17,1
      85 DFEF      RCALL	_s_ms
(0020) 	PORTA|=(1<<RW);     //RW=1
      86 9ADE      SBI	0x1B,6
(0021) 	s_ms(500);
      87 EF04      LDI	R16,0xF4
      88 E011      LDI	R17,1
      89 DFEB      RCALL	_s_ms
      8A C01A      RJMP	0x00A5
(0022) 	while(temp)
(0023) 	{
(0024) 		PORTA|=(1<<EN); //EN=1
      8B 9ADF      SBI	0x1B,7
(0025) 		s_ms(500);
      8C EF04      LDI	R16,0xF4
      8D E011      LDI	R17,1
      8E DFE6      RCALL	_s_ms
(0026) 		DDRD=0x00;      //A口变输入
      8F 2422      CLR	R2
      90 BA21      OUT	0x11,R2
(0027) 		PORTD=0xff;     //上拉使能
      91 EF8F      LDI	R24,0xFF
      92 BB82      OUT	0x12,R24
(0028) 		s_ms(500);
      93 EF04      LDI	R16,0xF4
      94 E011      LDI	R17,1
      95 DFDF      RCALL	_s_ms
(0029) 		temp = PIND&0x80;    //读取A口
      96 B340      IN	R20,0x10
      97 7840      ANDI	R20,0x80
(0030) 		s_ms(500);      
      98 EF04      LDI	R16,0xF4
      99 E011      LDI	R17,1
      9A DFDA      RCALL	_s_ms
(0031) 		DDRD=0xff;      
      9B EF8F      LDI	R24,0xFF
      9C BB81      OUT	0x11,R24
(0032) 		PORTD=0xff;        //A口变输出
      9D BB82      OUT	0x12,R24
(0033) 		s_ms(500);
      9E EF04      LDI	R16,0xF4
      9F E011      LDI	R17,1
      A0 DFD4      RCALL	_s_ms
(0034) 		PORTA&=~(1<<EN);   //EN=0
      A1 98DF      CBI	0x1B,7
(0035) 		s_ms(500);
      A2 EF04      LDI	R16,0xF4
      A3 E011      LDI	R17,1
      A4 DFD0      RCALL	_s_ms
      A5 2344      TST	R20
      A6 F721      BNE	0x008B
      A7 9149      LD	R20,Y+
      A8 9508      RET
_writecom:
  com                  --> R10
      A9 92AA      ST	R10,-Y
      AA 2EA0      MOV	R10,R16
(0036) 	}
(0037) }
(0038) 
(0039) //写指令
(0040) void writecom(uchar	com)
(0041) {
(0042) 	busy();
      AB DFD2      RCALL	_busy
(0043) 	s_ms(500);
      AC EF04      LDI	R16,0xF4
      AD E011      LDI	R17,1
      AE DFC6      RCALL	_s_ms
(0044) 	PORTA&=~(1<<RS);   //RS=0
      AF 98DD      CBI	0x1B,5
(0045) 	s_ms(500);
      B0 EF04      LDI	R16,0xF4
      B1 E011      LDI	R17,1
      B2 DFC2      RCALL	_s_ms
(0046) 	PORTA&=~(1<<RW);   //RW=0
      B3 98DE      CBI	0x1B,6
(0047) 	s_ms(500);
      B4 EF04      LDI	R16,0xF4
      B5 E011      LDI	R17,1
      B6 DFBE      RCALL	_s_ms
(0048) 	PORTA|=(1<<EN);    //EN=1
      B7 9ADF      SBI	0x1B,7
(0049) 	s_ms(500);
      B8 EF04      LDI	R16,0xF4
      B9 E011      LDI	R17,1
      BA DFBA      RCALL	_s_ms
(0050) 	PORTD = com;       //输出指令
      BB BAA2      OUT	0x12,R10
(0051) 	s_ms(500);
      BC EF04      LDI	R16,0xF4
      BD E011      LDI	R17,1
      BE DFB6      RCALL	_s_ms
(0052) 	PORTA&=~(1<<EN);   //EN=0
      BF 98DF      CBI	0x1B,7
(0053) 	s_ms(500);
      C0 EF04      LDI	R16,0xF4
      C1 E011      LDI	R17,1
      C2 DFB2      RCALL	_s_ms
      C3 90A9      LD	R10,Y+
      C4 9508      RET
(0054) }
(0055) 
(0056) //1602初始化
(0057) void	LcdInit(void)
(0058) {
(0059)     DDRD = 0xff; 
_LcdInit:
      C5 EF8F      LDI	R24,0xFF
      C6 BB81      OUT	0x11,R24
(0060)     PORTD = 0x00; 
      C7 2422      CLR	R2
      C8 BA22      OUT	0x12,R2
(0061) 	writecom(0x38);
      C9 E308      LDI	R16,0x38
      CA DFDE      RCALL	_writecom
(0062) 	s_ms(1000);
      CB EE08      LDI	R16,0xE8
      CC E013      LDI	R17,3
      CD DFA7      RCALL	_s_ms
(0063) 	writecom(0x01);
      CE E001      LDI	R16,1
      CF DFD9      RCALL	_writecom
(0064) 	s_ms(1000);
      D0 EE08      LDI	R16,0xE8
      D1 E013      LDI	R17,3
      D2 DFA2      RCALL	_s_ms
(0065) 	s_ms(1000);
      D3 EE08      LDI	R16,0xE8
      D4 E013      LDI	R17,3
      D5 DF9F      RCALL	_s_ms
(0066) 	s_ms(1000);
      D6 EE08      LDI	R16,0xE8
      D7 E013      LDI	R17,3
      D8 DF9C      RCALL	_s_ms
(0067) 	s_ms(1000);
      D9 EE08      LDI	R16,0xE8
      DA E013      LDI	R17,3
      DB DF99      RCALL	_s_ms
(0068) 	s_ms(1000);
      DC EE08      LDI	R16,0xE8
      DD E013      LDI	R17,3
      DE DF96      RCALL	_s_ms
(0069) 	s_ms(1000);
      DF EE08      LDI	R16,0xE8
      E0 E013      LDI	R17,3
      E1 DF93      RCALL	_s_ms
(0070) 	s_ms(1000);
      E2 EE08      LDI	R16,0xE8
      E3 E013      LDI	R17,3
      E4 DF90      RCALL	_s_ms
(0071) 	writecom(0x02);
      E5 E002      LDI	R16,2
      E6 DFC2      RCALL	_writecom
(0072) 	s_ms(1000);
      E7 EE08      LDI	R16,0xE8
      E8 E013      LDI	R17,3
      E9 DF8B      RCALL	_s_ms
(0073) 	writecom(0x06);
      EA E006      LDI	R16,6
      EB DFBD      RCALL	_writecom
(0074) 	s_ms(1000);
      EC EE08      LDI	R16,0xE8
      ED E013      LDI	R17,3
      EE DF86      RCALL	_s_ms
(0075) 	writecom(0x0c);
      EF E00C      LDI	R16,0xC
      F0 DFB8      RCALL	_writecom
(0076) 	s_ms(1000);
      F1 EE08      LDI	R16,0xE8
      F2 E013      LDI	R17,3
      F3 DF81      RCALL	_s_ms
(0077) 	writecom(0x38);	
      F4 E308      LDI	R16,0x38
      F5 DFB3      RCALL	_writecom
(0078) 	s_ms(1000);
      F6 EE08      LDI	R16,0xE8
      F7 E013      LDI	R17,3
      F8 DF7C      RCALL	_s_ms
      F9 9508      RET
_writedata:
  data                 --> R10
      FA 92AA      ST	R10,-Y
      FB 2EA0      MOV	R10,R16
(0079) }	
(0080) 
(0081) //写数据
(0082) void	writedata(uchar data)
(0083) {
(0084) 	busy();
      FC DF81      RCALL	_busy
(0085) 	s_ms(500);
      FD EF04      LDI	R16,0xF4
      FE E011      LDI	R17,1
      FF DF75      RCALL	_s_ms
(0086) 	PORTA|=(1<<RS);   //RS=1
     100 9ADD      SBI	0x1B,5
(0087) 	s_ms(500);
     101 EF04      LDI	R16,0xF4
     102 E011      LDI	R17,1
     103 DF71      RCALL	_s_ms
(0088) 	PORTA&=~(1<<RW);   //RW=0
     104 98DE      CBI	0x1B,6
(0089) 	s_ms(500);
     105 EF04      LDI	R16,0xF4
     106 E011      LDI	R17,1
     107 DF6D      RCALL	_s_ms
(0090) 	PORTA|=(1<<EN);    //EN=1
     108 9ADF      SBI	0x1B,7
(0091) 	s_ms(500);
     109 EF04      LDI	R16,0xF4
     10A E011      LDI	R17,1
     10B DF69      RCALL	_s_ms
(0092) 	PORTD = data;      //输出数据
     10C BAA2      OUT	0x12,R10
(0093) 	s_ms(500);
     10D EF04      LDI	R16,0xF4
     10E E011      LDI	R17,1
     10F DF65      RCALL	_s_ms
(0094) 	PORTA&=~(1<<EN);   //EN=0
     110 98DF      CBI	0x1B,7
(0095) 	s_ms(500);
     111 EF04      LDI	R16,0xF4
     112 E011      LDI	R17,1
     113 DF61      RCALL	_s_ms
     114 90A9      LD	R10,Y+
     115 9508      RET
_readdata:
  temp                 --> R10
     116 92AA      ST	R10,-Y
(0096) }
(0097) 
(0098) 
(0099) //读数据
(0100) uchar	readdata(void)
(0101) {
(0102) 	uchar temp;
(0103) 	busy();
     117 DF66      RCALL	_busy
(0104) 	s_ms(500);
     118 EF04      LDI	R16,0xF4
     119 E011      LDI	R17,1
     11A DF5A      RCALL	_s_ms
(0105) 	PORTA|=(1<<RS);  //RS=1
     11B 9ADD      SBI	0x1B,5
(0106) 	s_ms(500);
     11C EF04      LDI	R16,0xF4
     11D E011      LDI	R17,1
     11E DF56      RCALL	_s_ms
(0107) 	PORTA|=(1<<RW);  //RW=1
     11F 9ADE      SBI	0x1B,6
(0108) 	s_ms(500);
     120 EF04      LDI	R16,0xF4
     121 E011      LDI	R17,1
     122 DF52      RCALL	_s_ms
(0109) 	PORTA|=(1<<EN);  //EN=1
     123 9ADF      SBI	0x1B,7
(0110) 	s_ms(500);
     124 EF04      LDI	R16,0xF4
     125 E011      LDI	R17,1
     126 DF4E      RCALL	_s_ms
(0111) 	DDRD=0x00;       //A端口变输入
     127 2422      CLR	R2
     128 BA21      OUT	0x11,R2
(0112) 	s_ms(500);
     129 EF04      LDI	R16,0xF4
     12A E011      LDI	R17,1
     12B DF49      RCALL	_s_ms
(0113) 	temp = PIND;     //读A端口
     12C B2A0      IN	R10,0x10
(0114) 	s_ms(500);
     12D EF04      LDI	R16,0xF4
     12E E011      LDI	R17,1
     12F DF45      RCALL	_s_ms
(0115) 	DDRD=0xff;       //A端口变输出
     130 EF8F      LDI	R24,0xFF
     131 BB81      OUT	0x11,R24
(0116) 	s_ms(500);
     132 EF04      LDI	R16,0xF4
     133 E011      LDI	R17,1
     134 DF40      RCALL	_s_ms
(0117) 	PORTA&=~(1<<EN); //EN=0
     135 98DF      CBI	0x1B,7
(0118) 	s_ms(500);
     136 EF04      LDI	R16,0xF4
     137 E011      LDI	R17,1
     138 DF3C      RCALL	_s_ms
(0119) 	return temp;	
     139 2D0A      MOV	R16,R10
     13A 90A9      LD	R10,Y+
     13B 9508      RET
_WriteCGRAM:
  t                    --> R10
  i                    --> R20
  pBuffer              --> R22
  num                  --> R10
     13C 940E 02C7 CALL	push_xgsetF00C
     13E 01B9      MOVW	R22,R18
     13F 0158      MOVW	R10,R16
(0120) }
(0121) 
(0122) //=================================================
(0123) // 描述: 写LCD内部CGRAM函数
(0124) // 入口: ‘num’要写的数据个数
(0125) //        ‘pbuffer’要写的数据的首地址
(0126) // 出口: 无
(0127) //================================================
(0128) void	WriteCGRAM(uint	num, const uint	*pBuffer)
(0129) {
(0130) 	uint	i,t;
(0131) 	writecom(0x40);
     140 E400      LDI	R16,0x40
     141 DF67      RCALL	_writecom
(0132) 	PORTA|=(1<<RS);
     142 9ADD      SBI	0x1B,5
(0133) 	PORTA&=~(1<<RW);
     143 98DE      CBI	0x1B,6
(0134) 	for(i=num;i!=0;i--)
     144 01A5      MOVW	R20,R10
     145 C00A      RJMP	0x0150
(0135) 	{
(0136) 		t = *pBuffer;
     146 01FB      MOVW	R30,R22
     147 90A7      ELPM	R10,Z+
     148 90B6      ELPM	R11,10(Z)
(0137) 		PORTA|=(1<<EN);
     149 9ADF      SBI	0x1B,7
(0138) 		PORTD = t;
     14A BAA2      OUT	0x12,R10
(0139) 		PORTA&=~(1<<EN);				
     14B 98DF      CBI	0x1B,7
(0140) 		pBuffer++;
     14C 5F6E      SUBI	R22,0xFE
     14D 4F7F      SBCI	R23,0xFF
     14E 5041      SUBI	R20,1
     14F 4050      SBCI	R21,0
     150 3040      CPI	R20,0
     151 0745      CPC	R20,R21
     152 F799      BNE	0x0146
     153 940C 02CE JMP	pop_xgsetF00C
_WriteMenu:
  t                    --> R10
  i                    --> R22
  pBuffer              --> R20
     155 940E 02C7 CALL	push_xgsetF00C
     157 01A8      MOVW	R20,R16
(0141) 	}
(0142) 	
(0143) }
(0144) 
(0145) //=================================================
(0146) //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
(0147) //入口:菜单数组首地址
(0148) //出口:无
(0149) //=================================================
(0150) void	WriteMenu(const uchar *pBuffer)
(0151) {
(0152) 	uchar	i,t;
(0153) 	writecom(0x80);   //数据地址
     158 E800      LDI	R16,0x80
     159 DF4F      RCALL	_writecom
(0154) 	
(0155) 	PORTA|=(1<<RS);
     15A 9ADD      SBI	0x1B,5
(0156) 	PORTA&=~(1<<RW);
     15B 98DE      CBI	0x1B,6
(0157) 	s_ms(50);
     15C E302      LDI	R16,0x32
     15D E010      LDI	R17,0
     15E DF16      RCALL	_s_ms
(0158) 	for(i=0;i<16;i++)
     15F 2766      CLR	R22
     160 C00B      RJMP	0x016C
(0159) 	{
(0160) 		t = *pBuffer;
     161 01FA      MOVW	R30,R20
     162 90A6      ELPM	R10,11(Z)
(0161) 		PORTD = t;
     163 BAA2      OUT	0x12,R10
(0162) 		PORTA|=(1<<EN);
     164 9ADF      SBI	0x1B,7
(0163) 		s_ms(50);
     165 E302      LDI	R16,0x32
     166 E010      LDI	R17,0
     167 DF0D      RCALL	_s_ms
(0164) 		PORTA&=~(1<<EN);				
     168 98DF      CBI	0x1B,7
(0165) 		pBuffer++;
     169 5F4F      SUBI	R20,0xFF
     16A 4F5F      SBCI	R21,0xFF
     16B 9563      INC	R22
     16C 3160      CPI	R22,0x10
     16D F398      BCS	0x0161
(0166) 	}
(0167) 	writecom(0xC0);
     16E EC00      LDI	R16,0xC0
     16F DF39      RCALL	_writecom
(0168) 
(0169) 	PORTA|=(1<<RS);
     170 9ADD      SBI	0x1B,5
(0170) 	PORTA&=~(1<<RW);
     171 98DE      CBI	0x1B,6
(0171) 	s_ms(50);	
     172 E302      LDI	R16,0x32
     173 E010      LDI	R17,0
     174 DF00      RCALL	_s_ms
(0172) 	for(i=0;i<16;i++)
     175 2766      CLR	R22
     176 C00B      RJMP	0x0182
(0173) 	{
(0174) 		t = *pBuffer;
     177 01FA      MOVW	R30,R20
     178 90A6      ELPM	R10,11(Z)
(0175) 		PORTD = t;
     179 BAA2      OUT	0x12,R10
(0176) 		PORTA|=(1<<EN);
     17A 9ADF      SBI	0x1B,7
(0177) 		s_ms(50);
     17B E302      LDI	R16,0x32
     17C E010      LDI	R17,0
     17D DEF7      RCALL	_s_ms
(0178) 		PORTA&=~(1<<EN);				
     17E 98DF      CBI	0x1B,7
(0179) 		pBuffer++;
     17F 5F4F      SUBI	R20,0xFF
     180 4F5F      SBCI	R21,0xFF
     181 9563      INC	R22
     182 3160      CPI	R22,0x10
     183 F398      BCS	0x0177
     184 940C 02CE JMP	pop_xgsetF00C
_WriteNum:
  num                  --> R20
  col                  --> R10

⌨️ 快捷键说明

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