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

📄 ds18b20.lst

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

⌨️ 快捷键说明

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