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

📄 ds18b20.lst

📁 16个单片机c语言实验程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
     125 E011      LDI	R17,1
     126 DFD0      RCALL	_s_ms
     127 2344      TST	R20
     128 F721      BNE	0x010D
     129 9149      LD	R20,Y+
     12A 9508      RET
_writecom:
  com                  --> R10
     12B 92AA      ST	R10,-Y
     12C 2EA0      MOV	R10,R16
(0036) 	}
(0037) }
(0038) 
(0039) //写指令
(0040) void writecom(uchar	com)
(0041) {
(0042) 	busy();
     12D DFD2      RCALL	_busy
(0043) 	s_ms(500);
     12E EF04      LDI	R16,0xF4
     12F E011      LDI	R17,1
     130 DFC6      RCALL	_s_ms
(0044) 	PORTA&=~(1<<RS);   //RS=0
     131 98DD      CBI	0x1B,5
(0045) 	s_ms(500);
     132 EF04      LDI	R16,0xF4
     133 E011      LDI	R17,1
     134 DFC2      RCALL	_s_ms
(0046) 	PORTA&=~(1<<RW);   //RW=0
     135 98DE      CBI	0x1B,6
(0047) 	s_ms(500);
     136 EF04      LDI	R16,0xF4
     137 E011      LDI	R17,1
     138 DFBE      RCALL	_s_ms
(0048) 	PORTA|=(1<<EN);    //EN=1
     139 9ADF      SBI	0x1B,7
(0049) 	s_ms(500);
     13A EF04      LDI	R16,0xF4
     13B E011      LDI	R17,1
     13C DFBA      RCALL	_s_ms
(0050) 	PORTD = com;       //输出指令
     13D BAA2      OUT	0x12,R10
(0051) 	s_ms(500);
     13E EF04      LDI	R16,0xF4
     13F E011      LDI	R17,1
     140 DFB6      RCALL	_s_ms
(0052) 	PORTA&=~(1<<EN);   //EN=0
     141 98DF      CBI	0x1B,7
(0053) 	s_ms(500);
     142 EF04      LDI	R16,0xF4
     143 E011      LDI	R17,1
     144 DFB2      RCALL	_s_ms
     145 90A9      LD	R10,Y+
     146 9508      RET
(0054) }
(0055) 
(0056) //1602初始化
(0057) void	LcdInit(void)
(0058) {
(0059)     DDRD = 0xff; 
_LcdInit:
     147 EF8F      LDI	R24,0xFF
     148 BB81      OUT	0x11,R24
(0060)     PORTD = 0x00; 
     149 2422      CLR	R2
     14A BA22      OUT	0x12,R2
(0061) 	writecom(0x38);
     14B E308      LDI	R16,0x38
     14C DFDE      RCALL	_writecom
(0062) 	s_ms(1000);
     14D EE08      LDI	R16,0xE8
     14E E013      LDI	R17,3
     14F DFA7      RCALL	_s_ms
(0063) 	writecom(0x01);
     150 E001      LDI	R16,1
     151 DFD9      RCALL	_writecom
(0064) 	s_ms(1000);
     152 EE08      LDI	R16,0xE8
     153 E013      LDI	R17,3
     154 DFA2      RCALL	_s_ms
(0065) 	s_ms(1000);
     155 EE08      LDI	R16,0xE8
     156 E013      LDI	R17,3
     157 DF9F      RCALL	_s_ms
(0066) 	s_ms(1000);
     158 EE08      LDI	R16,0xE8
     159 E013      LDI	R17,3
     15A DF9C      RCALL	_s_ms
(0067) 	s_ms(1000);
     15B EE08      LDI	R16,0xE8
     15C E013      LDI	R17,3
     15D DF99      RCALL	_s_ms
(0068) 	s_ms(1000);
     15E EE08      LDI	R16,0xE8
     15F E013      LDI	R17,3
     160 DF96      RCALL	_s_ms
(0069) 	s_ms(1000);
     161 EE08      LDI	R16,0xE8
     162 E013      LDI	R17,3
     163 DF93      RCALL	_s_ms
(0070) 	s_ms(1000);
     164 EE08      LDI	R16,0xE8
     165 E013      LDI	R17,3
     166 DF90      RCALL	_s_ms
(0071) 	writecom(0x02);
     167 E002      LDI	R16,2
     168 DFC2      RCALL	_writecom
(0072) 	s_ms(1000);
     169 EE08      LDI	R16,0xE8
     16A E013      LDI	R17,3
     16B DF8B      RCALL	_s_ms
(0073) 	writecom(0x06);
     16C E006      LDI	R16,6
     16D DFBD      RCALL	_writecom
(0074) 	s_ms(1000);
     16E EE08      LDI	R16,0xE8
     16F E013      LDI	R17,3
     170 DF86      RCALL	_s_ms
(0075) 	writecom(0x0c);
     171 E00C      LDI	R16,0xC
     172 DFB8      RCALL	_writecom
(0076) 	s_ms(1000);
     173 EE08      LDI	R16,0xE8
     174 E013      LDI	R17,3
     175 DF81      RCALL	_s_ms
(0077) 	writecom(0x38);	
     176 E308      LDI	R16,0x38
     177 DFB3      RCALL	_writecom
(0078) 	s_ms(1000);
     178 EE08      LDI	R16,0xE8
     179 E013      LDI	R17,3
     17A DF7C      RCALL	_s_ms
     17B 9508      RET
_writedata:
  data                 --> R10
     17C 92AA      ST	R10,-Y
     17D 2EA0      MOV	R10,R16
(0079) }	
(0080) 
(0081) //写数据
(0082) void	writedata(uchar data)
(0083) {
(0084) 	busy();
     17E DF81      RCALL	_busy
(0085) 	s_ms(500);
     17F EF04      LDI	R16,0xF4
     180 E011      LDI	R17,1
     181 DF75      RCALL	_s_ms
(0086) 	PORTA|=(1<<RS);   //RS=1
     182 9ADD      SBI	0x1B,5
(0087) 	s_ms(500);
     183 EF04      LDI	R16,0xF4
     184 E011      LDI	R17,1
     185 DF71      RCALL	_s_ms
(0088) 	PORTA&=~(1<<RW);   //RW=0
     186 98DE      CBI	0x1B,6
(0089) 	s_ms(500);
     187 EF04      LDI	R16,0xF4
     188 E011      LDI	R17,1
     189 DF6D      RCALL	_s_ms
(0090) 	PORTA|=(1<<EN);    //EN=1
     18A 9ADF      SBI	0x1B,7
(0091) 	s_ms(500);
     18B EF04      LDI	R16,0xF4
     18C E011      LDI	R17,1
     18D DF69      RCALL	_s_ms
(0092) 	PORTD = data;      //输出数据
     18E BAA2      OUT	0x12,R10
(0093) 	s_ms(500);
     18F EF04      LDI	R16,0xF4
     190 E011      LDI	R17,1
     191 DF65      RCALL	_s_ms
(0094) 	PORTA&=~(1<<EN);   //EN=0
     192 98DF      CBI	0x1B,7
(0095) 	s_ms(500);
     193 EF04      LDI	R16,0xF4
     194 E011      LDI	R17,1
     195 DF61      RCALL	_s_ms
     196 90A9      LD	R10,Y+
     197 9508      RET
_readdata:
  temp                 --> R10
     198 92AA      ST	R10,-Y
(0096) }
(0097) 
(0098) 
(0099) //读数据
(0100) uchar	readdata(void)
(0101) {
(0102) 	uchar temp;
(0103) 	busy();
     199 DF66      RCALL	_busy
(0104) 	s_ms(500);
     19A EF04      LDI	R16,0xF4
     19B E011      LDI	R17,1
     19C DF5A      RCALL	_s_ms
(0105) 	PORTA|=(1<<RS);  //RS=1
     19D 9ADD      SBI	0x1B,5
(0106) 	s_ms(500);
     19E EF04      LDI	R16,0xF4
     19F E011      LDI	R17,1
     1A0 DF56      RCALL	_s_ms
(0107) 	PORTA|=(1<<RW);  //RW=1
     1A1 9ADE      SBI	0x1B,6
(0108) 	s_ms(500);
     1A2 EF04      LDI	R16,0xF4
     1A3 E011      LDI	R17,1
     1A4 DF52      RCALL	_s_ms
(0109) 	PORTA|=(1<<EN);  //EN=1
     1A5 9ADF      SBI	0x1B,7
(0110) 	s_ms(500);
     1A6 EF04      LDI	R16,0xF4
     1A7 E011      LDI	R17,1
     1A8 DF4E      RCALL	_s_ms
(0111) 	DDRD=0x00;       //A端口变输入
     1A9 2422      CLR	R2
     1AA BA21      OUT	0x11,R2
(0112) 	s_ms(500);
     1AB EF04      LDI	R16,0xF4
     1AC E011      LDI	R17,1
     1AD DF49      RCALL	_s_ms
(0113) 	temp = PIND;     //读A端口
     1AE B2A0      IN	R10,0x10
(0114) 	s_ms(500);
     1AF EF04      LDI	R16,0xF4
     1B0 E011      LDI	R17,1
     1B1 DF45      RCALL	_s_ms
(0115) 	DDRD=0xff;       //A端口变输出
     1B2 EF8F      LDI	R24,0xFF
     1B3 BB81      OUT	0x11,R24
(0116) 	s_ms(500);
     1B4 EF04      LDI	R16,0xF4
     1B5 E011      LDI	R17,1
     1B6 DF40      RCALL	_s_ms
(0117) 	PORTA&=~(1<<EN); //EN=0
     1B7 98DF      CBI	0x1B,7
(0118) 	s_ms(500);
     1B8 EF04      LDI	R16,0xF4
     1B9 E011      LDI	R17,1
     1BA DF3C      RCALL	_s_ms
(0119) 	return temp;	
     1BB 2D0A      MOV	R16,R10
     1BC 90A9      LD	R10,Y+
     1BD 9508      RET
_WriteCGRAM:
  t                    --> R10
  i                    --> R20
  pBuffer              --> R22
  num                  --> R10
     1BE 940E 0326 CALL	push_xgsetF00C
     1C0 01B9      MOVW	R22,R18
     1C1 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);
     1C2 E400      LDI	R16,0x40
     1C3 DF67      RCALL	_writecom
(0132) 	PORTA|=(1<<RS);
     1C4 9ADD      SBI	0x1B,5
(0133) 	PORTA&=~(1<<RW);
     1C5 98DE      CBI	0x1B,6
(0134) 	for(i=num;i!=0;i--)
     1C6 01A5      MOVW	R20,R10
     1C7 C00A      RJMP	0x01D2
(0135) 	{
(0136) 		t = *pBuffer;
     1C8 01FB      MOVW	R30,R22
     1C9 90A5      LPM	R10,Z+
     1CA 90B4      LPM	R11,10(Z)
(0137) 		PORTA|=(1<<EN);
     1CB 9ADF      SBI	0x1B,7
(0138) 		PORTD = t;
     1CC BAA2      OUT	0x12,R10
(0139) 		PORTA&=~(1<<EN);				
     1CD 98DF      CBI	0x1B,7
(0140) 		pBuffer++;
     1CE 5F6E      SUBI	R22,0xFE
     1CF 4F7F      SBCI	R23,0xFF
     1D0 5041      SUBI	R20,1
     1D1 4050      SBCI	R21,0
     1D2 3040      CPI	R20,0
     1D3 0745      CPC	R20,R21
     1D4 F799      BNE	0x01C8
     1D5 940C 032D JMP	pop_xgsetF00C
_WriteMenu:
  t                    --> R10
  i                    --> R22
  pBuffer              --> R20
     1D7 940E 0326 CALL	push_xgsetF00C
     1D9 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);   //数据地址
     1DA E800      LDI	R16,0x80
     1DB DF4F      RCALL	_writecom
(0154) 	
(0155) 	PORTA|=(1<<RS);
     1DC 9ADD      SBI	0x1B,5
(0156) 	PORTA&=~(1<<RW);
     1DD 98DE      CBI	0x1B,6
(0157) 	s_ms(50);
     1DE E302      LDI	R16,0x32
     1DF E010      LDI	R17,0
     1E0 DF16      RCALL	_s_ms
(0158) 	for(i=0;i<16;i++)
     1E1 2766      CLR	R22
     1E2 C00B      RJMP	0x01EE
(0159) 	{
(0160) 		t = *pBuffer;
     1E3 01FA      MOVW	R30,R20
     1E4 90A4      LPM	R10,11(Z)
(0161) 		PORTD = t;
     1E5 BAA2      OUT	0x12,R10
(0162) 		PORTA|=(1<<EN);
     1E6 9ADF      SBI	0x1B,7
(0163) 		s_ms(50);
     1E7 E302      LDI	R16,0x32
     1E8 E010      LDI	R17,0
     1E9 DF0D      RCALL	_s_ms
(0164) 		PORTA&=~(1<<EN);				
     1EA 98DF      CBI	0x1B,7
(0165) 		pBuffer++;
     1EB 5F4F      SUBI	R20,0xFF
     1EC 4F5F      SBCI	R21,0xFF
     1ED 9563      INC	R22
     1EE 3160      CPI	R22,0x10
     1EF F398      BCS	0x01E3
(0166) 	}
(0167) 	writecom(0xC0);
     1F0 EC00      LDI	R16,0xC0
     1F1 DF39      RCALL	_writecom
(0168) 
(0169) 	PORTA|=(1<<RS);
     1F2 9ADD      SBI	0x1B,5
(0170) 	PORTA&=~(1<<RW);
     1F3 98DE      CBI	0x1B,6
(0171) 	s_ms(50);	
     1F4 E302      LDI	R16,0x32
     1F5 E010      LDI	R17,0
     1F6 DF00      RCALL	_s_ms
(0172) 	for(i=0;i<16;i++)
     1F7 2766      CLR	R22
     1F8 C00B      RJMP	0x0204
(0173) 	{
(0174) 		t = *pBuffer;
     1F9 01FA      MOVW	R30,R20
     1FA 90A4      LPM	R10,11(Z)
(0175) 		PORTD = t;
     1FB BAA2      OUT	0x12,R10
(0176) 		PORTA|=(1<<EN);
     1FC 9ADF      SBI	0x1B,7
(0177) 		s_ms(50);
     1FD E302      LDI	R16,0x32
     1FE E010      LDI	R17,0
     1FF DEF7      RCALL	_s_ms
(0178) 		PORTA&=~(1<<EN);				
     200 98DF      CBI	0x1B,7
(0179) 		pBuffer++;
     201 5F4F      SUBI	R20,0xFF
     202 4F5F      SBCI	R21,0xFF
     203 9563      INC	R22
     204 3160      CPI	R22,0x10
     205 F398      BCS	0x01F9
     206 940C 032D JMP	pop_xgsetF00C
_WriteNum:
  num                  --> R20
  col                  --> R10
  row                  --> R22
     208 940E 0326 CALL	push_xgsetF00C
     20A 0159      MOVW	R10,R18
     20B 01B8      MOVW	R22,R16
     20C 814E      LDD	R20,Y+6
     20D 815F      LDD	R21,Y+7
(0180) 	}
(0181) }
(0182) //====================================================
(0183) // 描述:在任意位置写数字函数
(0184) // 入口:’row‘表示要写数字所在的行地址,只能为1或2
(0185) //       ’col‘表示要写数字所在的列地址,只能为0--15
(0186) //		 ‘num’表示要写的数字,只能为0--9
(0187) // 出口:无
(0188) //===================================================
(0189) void	WriteNum(uint	row,uint	col,uint	 num)
(0190) {
(0191) 	if (row == 1)	row = 0x80 + col;
     20E 3061      CPI	R22,1
     20F E0E0      LDI	R30,0
     210 077E      CPC	R23,R30
     211 F421      BNE	0x0216
     212 01B5      MOVW	R22,R10
     213 5860      SUBI	R22,0x80
     214 4F7F      SBCI	R23,0xFF
     215 C003      RJMP	0x0219
(0192) 	else	row = 0xC0 + col;
     216 01B5      MOVW	R22,R10
     217 5460      SUBI	R22,0x40
     218 4F7F      SBCI	R23,0xFF
(0193) 	writecom(row);
     219 2F06      MOV	R16,R22
     21A DF10      RCALL	_writecom
(0194) 	if (num<=0 | num>9)	num =0x30;
     21B 3040      CPI	R20,0

⌨️ 快捷键说明

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