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

📄 main.s

📁 PC通过串口控制LCD1602显示!MCU为AVR单片机!
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 121
; 	 char temp                      ;			//循环变量
; 	 unsigned int data,vdata        ;          //温度和电压的值
; /******************************************************************************
;                                 端口初始化和晶体频率校正
; ******************************************************************************/
; 	 
; 	 
; 	 port_init()                     ;            //端口初始话~~~!
	xcall _port_init
	.dbline 122
; 	 OSCCAL=0xb0					 ;
	ldi R24,176
	out 0x31,R24
	.dbline 128
; 	 
; /*------------------------------------------------------------------
;  初始化完成,初始化温度计,初始化液晶
; --------------------------------------------------------------------*/
; 
;      resetDS18B20()                  ;       	  //初始化温度计
	xcall _resetDS18B20
	.dbline 129
;      DDRA|=LCD_DATA                  ;            // 数据为输出
	in R24,0x1a
	ori R24,240
	out 0x1a,R24
	.dbline 130
; 	 DDRC|=LCD_RS|LCD_EN             ;       	  //置位RS.EN
	in R24,0x14
	ori R24,192
	out 0x14,R24
	.dbline 131
;      LCD_init()                      ;    	 	  //液晶初始化 
	xcall _LCD_init
	.dbline 138
; 	 
; /*****************************************************************************
; 					 初始化串口
; ******************************************************************************/
; 	// UBRR=0x33;						 ;		     //波特率9600
; 	// UCR=0x18						 ;			 //设置串口接收发送有效
;  UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 139
;  UCSRA = 0x00;
	out 0xb,R2
	.dbline 140
;  UCSRC = BIT(URSEL) | 0x06;
	ldi R24,134
	out 0x20,R24
	.dbline 141
;  UBRRL = baud; //set baud rate lo
	ldi R24,51
	out 0x9,R24
	.dbline 142
;  UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 143
;  UCSRB = 0x98;
	ldi R24,152
	out 0xa,R24
	.dbline 149
;  
; /****************************************************************************
; 					初始化ad口
; 使用内部基准2.56 v , 使用 pa1(ad1)口采集电压,并发送到串口														   
; *****************************************************************************/
;     BIT_CLR(DDRA,1);
	cbi 0x1a,1
	.dbline 150
; 	BIT_CLR(PORTA,1);//设置采集端口为高祖状态
	cbi 0x1b,1
	.dbline 151
; 	SEI();
	sei
	xjmp L23
L22:
	.dbline 159
; 
; /******************************************************************************
;  主循环体,循环测温,电压,并发送到上位机
; ******************************************************************************/	
; 
;      while(1)
; 	 
;        {
	.dbline 160
; 	     resetDS18B20()              	  ;
	xcall _resetDS18B20
	.dbline 161
; 	     m=readTempDS18B20()		      ;       //测试终端温度
	xcall _readTempDS18B20
	movw R2,R16
	clr R4
	clr R5
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 163
; 		 
; 		 data=m;
	movw R30,R28
	ldd R12,z+0
	ldd R13,z+1
	.dbline 164
; 		  vdata = ad_1()                     ;     //测试终端工作电压
	xcall _ad_1
	movw R10,R16
	.dbline 165
; 		  puts(data)                         ;
	movw R16,R12
	xcall _puts
	.dbline 166
; 		  puts(vdata)                        ;     //发送电压和温度到上位机
	movw R16,R10
	xcall _puts
	.dbline 167
; 		  if(start==1)      display() 		 ;     // 普通模式
	lds R24,_start
	cpi R24,1
	brne L25
	.dbline 167
	xcall _display
	xjmp L26
L25:
	.dbline 168
; 		  else if(clr==1)   
	lds R24,_clr
	cpi R24,1
	brne L27
	.dbline 169
; 		  {
	.dbline 170
; 		   LCD_write_char(0x01,0);
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	xcall _LCD_write_char
	.dbline 171
; 		   clr=0;
	clr R2
	sts _clr,R2
	.dbline 172
; 		   one=0;
	sts _one,R2
	.dbline 173
; 		   two=0;
	sts _two,R2
	.dbline 174
; 		   start=0;
	sts _start,R2
	.dbline 175
; 		   end=0;
	sts _end,R2
	.dbline 176
; 		   }
	xjmp L28
L27:
	.dbline 178
; 		  else
; 		  delay_nms(1000)					 ;
	ldi R16,1000
	ldi R17,3
	xcall _delay_nms
L28:
L26:
	.dbline 180
L23:
	.dbline 157
	xjmp L22
X1:
	.dbline -2
L21:
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l temp 1 c
	.dbsym r vdata 10 i
	.dbsym r data 12 i
	.dbsym l m 0 l
	.dbend
	.dbfunc e puts _puts fV
;              l -> R20
;              h -> R20
;           data -> y+2
	.even
_puts::
	st -y,r17
	st -y,r16
	xcall push_gset1
	.dbline -1
	.dbline 185
; 	  
;        }//主循环结束
; }//主程序结束
; 
; 
; void puts(unsigned int data )
;     {
	.dbline 188
; 	      // UDR=data>>8;
; 		  unsigned char h , l ;
; 		   h=*((unsigned char *)(&data)+1);
	ldd R20,y+3
	.dbline 189
; 		   UDR=h;
	out 0xc,R20
L31:
	.dbline 190
L32:
	.dbline 190
; 		   while(!(USR&0x40));
	sbis 0xb,6
	rjmp L31
	.dbline 191
; 		   USR |= 0x40;
	sbi 0xb,6
	.dbline 193
; 		   //UDR=data;
; 		   l=*(unsigned char *)(&data);
	movw R30,R28
	ldd R20,z+2
	.dbline 194
; 		   UDR=l;
	out 0xc,R20
L34:
	.dbline 195
L35:
	.dbline 195
; 		   while(!(USR&0x40));
	sbis 0xb,6
	rjmp L34
	.dbline 196
; 		   USR |= 0x40;
	sbi 0xb,6
	.dbline -2
L29:
	xcall pop_gset1
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r l 20 c
	.dbsym r h 20 c
	.dbsym l data 2 i
	.dbend
	.dbfunc e display _display fV
;              k -> R20
	.even
_display::
	xcall push_gset1
	.dbline -1
	.dbline 201
; 		  
;     }
; 	
; void display(void)
;   {
	.dbline 203
;   unsigned char k ;
;   if(one==1)
	lds R24,_one
	cpi R24,1
	brne L38
	.dbline 204
;       {
	.dbline 205
; 	   LCD_set_xy(0,0);
	clr R18
	clr R16
	xcall _LCD_set_xy
	.dbline 206
; 	   for(k=1;k<=end;k++)
	ldi R20,1
	xjmp L43
L40:
	.dbline 207
	.dbline 208
	ldi R24,<_string
	ldi R25,>_string
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 210
L41:
	.dbline 206
	inc R20
L43:
	.dbline 206
	lds R2,_end
	cp R2,R20
	brsh L40
	.dbline 211
;           {
; 		   LCD_write_char(0,string[k]);
; 		   
; 		   }
;        start=0;
	clr R2
	sts _start,R2
	.dbline 212
;        i=0;
	sts _i,R2
	.dbline 213
; 	   }
	xjmp L39
L38:
	.dbline 214
;    else if(two==1)
	lds R24,_two
	cpi R24,1
	brne L44
	.dbline 215
;       {
	.dbline 216
; 	   LCD_set_xy(0,1);
	ldi R18,1
	clr R16
	xcall _LCD_set_xy
	.dbline 217
; 	   for(k=1;k<=end;k++)
	ldi R20,1
	xjmp L49
L46:
	.dbline 218
	.dbline 219
	ldi R24,<_string
	ldi R25,>_string
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_char
	.dbline 221
L47:
	.dbline 217
	inc R20
L49:
	.dbline 217
	lds R2,_end
	cp R2,R20
	brsh L46
	.dbline 222
; 	     {
; 		  LCD_write_char(0,string[k]);
; 		  
; 		  }
; 	   start = 0 ;
	clr R2
	sts _start,R2
	.dbline 223
; 	   i= 0;
	sts _i,R2
	.dbline 224
; 	  }
L44:
L39:
	.dbline -2
L37:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\我的设计\delphi\uartdispy\mcu\main.c
_string::
	.blkb 18
	.dbsym e string _string A[18:18]c

⌨️ 快捷键说明

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