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

📄 main.s

📁 AVR试验板程序,有LED,键盘和串口的程序
💻 S
📖 第 1 页 / 共 2 页
字号:
; led_ch=led_ch>>1;
	lds R2,_led_ch
	lsr R2
	sts _led_ch,R2
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e flash_led_type2 _flash_led_type2 fV
	.even
_flash_led_type2::
	.dbline -1
	.dbline 160
; }
; 
; void flash_led_type2(void)                    //PD口的跑马灯显示  从左到右
; {
	.dbline 161
; if (led_ch==0x00) led_ch=0x02;
	lds R2,_led_ch
	tst R2
	brne L27
	.dbline 161
	ldi R24,2
	sts _led_ch,R24
L27:
	.dbline 162
; PORTD=~(led_ch);      
	lds R2,_led_ch
	com R2
	out 0x12,R2
	.dbline 163
; led_ch=led_ch<<1;
	lds R2,_led_ch
	lsl R2
	sts _led_ch,R2
	.dbline -2
L26:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e flash_led_type3 _flash_led_type3 fV
	.even
_flash_led_type3::
	.dbline -1
	.dbline 167
; }
; 
; void flash_led_type3(void)                    //PD口的跑马灯显示  反相
; {
	.dbline 168
; PORTD^=0XFC;                    
	ldi R24,252
	ldi R25,0
	in R2,0x12
	clr R3
	eor R2,R24
	eor R3,R25
	out 0x12,R2
	.dbline -2
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e flash_led_type4 _flash_led_type4 fV
;         tmp_PD -> R16
	.even
_flash_led_type4::
	.dbline -1
	.dbline 172
; }
; 
; void flash_led_type4(void)                    //PD口的跑马灯显示  流水
; {
	.dbline 174
; unsigned char tmp_PD;
; tmp_PD=PIND;
	in R16,0x10
	.dbline 175
; tmp_PD|=0XFC;
	ori R16,252
	.dbline 176
; led_ch++;
	lds R24,_led_ch
	subi R24,255    ; addi 1
	sts _led_ch,R24
	.dbline 177
; if (led_ch==0X87) led_ch=0X80;
	cpi R24,135
	brne L31
	.dbline 177
	ldi R24,128
	sts _led_ch,R24
L31:
	.dbline 178
; switch (led_ch)
	lds R16,_led_ch
	clr R17
	cpi R16,129
	ldi R30,0
	cpc R17,R30
	breq L36
	cpi R16,130
	ldi R30,0
	cpc R17,R30
	breq L37
	cpi R16,131
	ldi R30,0
	cpc R17,R30
	breq L38
	cpi R16,132
	ldi R30,0
	cpc R17,R30
	breq L39
	cpi R16,133
	ldi R30,0
	cpc R17,R30
	breq L40
	cpi R16,134
	ldi R30,0
	cpc R17,R30
	breq L41
	xjmp L33
X0:
	.dbline 179
; {
L36:
	.dbline 181
; 
; case 0X81: PORTD=~(0X78); break;     //0111 10  00 代码
	ldi R24,135
	out 0x12,R24
	.dbline 181
	xjmp L34
L37:
	.dbline 182
; case 0X82: PORTD=~(0XD4); break;     //1011 01  00 代码
	ldi R24,-213
	ldi R25,-1
	out 0x12,R24
	.dbline 182
	xjmp L34
L38:
	.dbline 183
; case 0X83: PORTD=~(0XCC); break;     //1100 11  00 代码
	ldi R24,-205
	ldi R25,-1
	out 0x12,R24
	.dbline 183
	xjmp L34
L39:
	.dbline 184
; case 0X84: PORTD=~(0XCC); break;     //1100 11  00 代码
	ldi R24,-205
	ldi R25,-1
	out 0x12,R24
	.dbline 184
	xjmp L34
L40:
	.dbline 185
; case 0X85: PORTD=~(0XD4); break;     //1011 01  00 代码
	ldi R24,-213
	ldi R25,-1
	out 0x12,R24
	.dbline 185
	xjmp L34
L41:
	.dbline 186
; case 0X86: PORTD=~(0X78); break;     //0111 10  00 代码
	ldi R24,135
	out 0x12,R24
	.dbline 186
L33:
L34:
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbsym r tmp_PD 16 c
	.dbend
	.dbfunc e delay30ms _delay30ms fV
;   tmp_delay_cn -> R16,R17
	.even
_delay30ms::
	.dbline -1
	.dbline 192
; }                 
; }
; 
; 
; void delay30ms(void)                          //延时30毫秒的子程序
; {
	.dbline 194
; unsigned int tmp_delay_cn;
; for (tmp_delay_cn=0;tmp_delay_cn<300;tmp_delay_cn++)
	clr R16
	clr R17
	xjmp L46
L43:
	.dbline 195
L44:
	.dbline 194
	subi R16,255  ; offset = 1
	sbci R17,255
L46:
	.dbline 194
	cpi R16,44
	ldi R30,1
	cpc R17,R30
	brlo L43
	.dbline -2
L42:
	.dbline 0 ; func end
	ret
	.dbsym r tmp_delay_cn 16 i
	.dbend
	.dbfunc e check_key_pressed _check_key_pressed fc
;        key_tem -> R16
	.even
_check_key_pressed::
	.dbline -1
	.dbline 200
; ;
; }
; 
; 
; unsigned char check_key_pressed(void)         //检查是否有键盘按下
; {
	.dbline 202
; unsigned char key_tem;
; key_tem=PINA &= ~(0XC3);
	in R24,0x19
	andi R24,60
	out 0x19,R24
	mov R16,R24
	.dbline 203
; if(key_tem!=0X3C)
	cpi R24,60
	breq L48
	.dbline 204
; return 1;
	ldi R16,1
	xjmp L47
L48:
	.dbline 206
; else
; return 0;
	clr R16
	.dbline -2
L47:
	.dbline 0 ; func end
	ret
	.dbsym r key_tem 16 c
	.dbend
	.dbfunc e find_key_code _find_key_code fc
;            uuu -> R20
	.even
_find_key_code::
	xcall push_gset1
	.dbline -1
	.dbline 211
; }
; 
; 
; unsigned char find_key_code(void)
; {
	.dbline 213
; unsigned char uuu;
; if(check_key_pressed()==1)
	xcall _check_key_pressed
	cpi R16,1
	brne L51
	.dbline 214
; {
	.dbline 215
;  delay30ms();                                //延时去抖动
	xcall _delay30ms
	.dbline 216
;  if(check_key_pressed()==1)
	xcall _check_key_pressed
	cpi R16,1
	brne L53
	.dbline 217
;   {
	.dbline 218
;   uuu=(PINA & 0X3C);
	in R20,0x19
	andi R20,60
	.dbline 219
;   return uuu;                   //屏蔽最高和最低两位
	mov R16,R20
	xjmp L50
L53:
	.dbline 221
;   }
; }
L51:
	.dbline 222
; return 0XC3;
	ldi R16,195
	.dbline -2
L50:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r uuu 20 c
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	xcall push_lset
	xcall push_gset1
	.dbline -1
	.dbline 227
; }
; 
; #pragma interrupt_handler timer0_ovf_isr:10  //
; void timer0_ovf_isr(void)
; {
	.dbline 228
;  TCNT0 = 0xB2;                               //计数器初始值重载
	ldi R24,178
	out 0x32,R24
	.dbline 229
;  if (tmp_cn_0==100)                           //固定时间产生变化
	lds R24,_tmp_cn_0
	cpi R24,100
	breq X2
	xjmp L56
X2:
	.dbline 230
;  {
	.dbline 231
;    switch (key_code)                         //根据按下的键盘产生一定的闪灯花样
	lds R20,_key_code
	clr R21
	cpi R20,44
	ldi R30,0
	cpc R21,R30
	breq L62
	ldi R24,44
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L66
L65:
	cpi R20,28
	ldi R30,0
	cpc R21,R30
	breq L61
	xjmp L58
L66:
	cpi R20,52
	ldi R30,0
	cpc R21,R30
	breq L63
	cpi R20,52
	ldi R30,0
	cpc R21,R30
	brlt L58
L67:
	cpi R20,56
	ldi R30,0
	cpc R21,R30
	breq L64
	xjmp L58
X1:
	.dbline 232
;    {
L61:
	.dbline 233
;    case 0X1C: flash_led_type4(); break;      
	xcall _flash_led_type4
	.dbline 233
	xjmp L59
L62:
	.dbline 234
;    case 0X2c: flash_led_type3(); break;      
	xcall _flash_led_type3
	.dbline 234
	xjmp L59
L63:
	.dbline 235
;    case 0X34: flash_led_type2(); break;      
	xcall _flash_led_type2
	.dbline 235
	xjmp L59
L64:
	.dbline 236
;    case 0X38: flash_led_type1(); break;     
	xcall _flash_led_type1
	.dbline 236
	xjmp L59
L58:
	.dbline 237
;    default:   flash_led_type4(); break;
	xcall _flash_led_type4
	.dbline 237
L59:
	.dbline 240
;    }                 
;  
;  disp_led(LED_INDEX[tmp_led_index]);        //循环显示8段数字LED
	ldi R24,<_LED_INDEX
	ldi R25,>_LED_INDEX
	lds R30,_tmp_led_index
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _disp_led
	.dbline 241
;  tmp_led_index++;
	lds R24,_tmp_led_index
	subi R24,255    ; addi 1
	sts _tmp_led_index,R24
	.dbline 242
;  if (tmp_led_index==10) tmp_led_index=0;    //LED计数器归零
	cpi R24,10
	brne L68
	.dbline 242
	clr R2
	sts _tmp_led_index,R2
L68:
	.dbline 244
;  
;  tmp_cn_0=0;                                //临时计数器0归零
	clr R2
	sts _tmp_cn_0,R2
	.dbline 245
;  }
	xjmp L57
L56:
	.dbline 247
	.dbline 248
	lds R24,_tmp_cn_0
	subi R24,255    ; addi 1
	sts _tmp_cn_0,R24
	.dbline 249
L57:
	.dbline -2
L55:
	xcall pop_gset1
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
;   tmp_key_code -> R20
	.even
_main::
	.dbline -1
	.dbline 256
;  else
;  {
;  tmp_cn_0=tmp_cn_0+1;                       //临时计数器递增
;  }
; }
; 
; 
; //****************** MAIN 程序的入口*************************//
; 
; void main()
; {
	.dbline 258
; unsigned char tmp_key_code;
; init_devices();
	xcall _init_devices
	xjmp L72
L71:
	.dbline 260
; while(1)
; {
	.dbline 261
;   start_adc_0();                             //循环进行ADC转换
	xcall _start_adc_0
	.dbline 263
;   
;   tmp_key_code=find_key_code() & 0X3C;              //判断是否按下键盘
	xcall _find_key_code
	mov R20,R16
	andi R20,60
	.dbline 265
;   
;   if (tmp_key_code!=0x3c) key_code=tmp_key_code;    
	cpi R20,60
	breq L74
	.dbline 265
	sts _key_code,R20
L74:
	.dbline 268
L72:
	.dbline 259
	xjmp L71
X3:
	.dbline -2
L70:
	.dbline 0 ; func end
	ret
	.dbsym r tmp_key_code 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\work\百步梯攀登计划\AVR程序\new\main.c
_key_code::
	.blkb 1
	.dbsym e key_code _key_code c
_tmp_cn_1::
	.blkb 1
	.dbsym e tmp_cn_1 _tmp_cn_1 c
_tmp_cn_0::
	.blkb 1
	.dbsym e tmp_cn_0 _tmp_cn_0 c

⌨️ 快捷键说明

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