性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

一起來學(xué)匯編

    本人新手,離畢業(yè)還有15天學(xué)了一段時(shí)間的匯編,寫了個(gè)小程序,貼出來大家噴噴,噴噴更快成長,順便也參加一下原創(chuàng)帖的活動(dòng),支持一下該網(wǎng)站。懂匯編的多多指教,這里也特別感謝王工(wangchuangwccc)和樂工( yueyunno1)給我的幫助。希望大家一起來學(xué)習(xí)!
全部回復(fù)(8)
正序查看
倒序查看
2014-06-12 17:27
首先來點(diǎn)個(gè)LED燈  想起剛開始學(xué)單片機(jī)看到燈亮是多么高興

0
回復(fù)
2014-06-12 17:29
@又一個(gè)暑假
首先來點(diǎn)個(gè)LED燈[圖片] 想起剛開始學(xué)單片機(jī)看到燈亮是多么高興[圖片]
 再貼上程序
       K1          bit   	P2.3   ;按鍵的I/O口
		
	key_state	EQU		20H     ;消抖和防止一直觸發(fā)用的
	key_step	EQU		21H    ;任務(wù)標(biāo)志
	
	ORG 	0000H
	SJMP	STAR
	ORG	    1BH
	LJMP	Timer0_intrrupt  ;裝T1中斷服務(wù)程序

star:	
    mov  key_state,#00H        ;初始化
	mov  key_step,#00H
	mov  P1,#0ffH
	
	mov  IE,#88H  ;
	mov	 TMOD,#10H
	mov	 TH1,#0D8H
	mov	 TL1,#0EFH
	setb TR1   ;啟動(dòng)T18
	setb EA
	
loop:
key_switch:
    jb   key_step.0, key_low_step1          ;查詢要執(zhí)行什么任務(wù)
	jb   key_step.1, key_low_step2
	jb   key_step.2, key_low_step3
	jb   key_step.3, key_low_step4
	jb   key_step.4, key_low_step5
	jb   key_step.5, key_low_step6
	jb   key_step.6, key_low_step7
	jb   key_step.7, key_low_step8
      
key_low_step0:
	mov  P1,#00H    ; 上電就執(zhí)行的任務(wù)不一定是點(diǎn)LED燈
	jmp  loop
		
key_low_step1:
	mov  P1,#01H    ;任務(wù)一  不一定是點(diǎn)LED燈
	jmp  loop
	
key_low_step2:
	mov  P1,#02H    ;任務(wù)二  不一定是點(diǎn)LED燈
	jmp  loop
	
key_low_step3:
	mov  P1,#04H	;;任務(wù)三  不一定是點(diǎn)LED燈
	jmp  loop
	
key_low_step4:
	mov  P1,#08H    ;任務(wù)四  不一定是點(diǎn)LED燈
	jmp  loop
	
key_low_step5:
	mov  P1,#10H    ;任務(wù)五 不一定是點(diǎn)LED燈
	jmp  loop
key_low_step6:
	mov  P1,#20H	;任務(wù)六  不一定是點(diǎn)LED燈
	jmp  loop
	
key_low_step7:
	mov  P1,#40H	;任務(wù)七  不一定是點(diǎn)LED燈
	jmp  loop
	
key_low_step8:
	mov  P1,#80H	;任務(wù)八  不一定是點(diǎn)LED燈
	jmp  loop


key_check:                                    ;檢測按鍵
	jb	 K1,key_high
	
key_low:                                      ;有按下可能是抖動(dòng)
	jb	 key_state.0,key_unchange
	setb key_state.0
	ret
		
key_high:                                      ;沒按下
	mov  key_state,#00H
	mov  a,key_step
	cjne a,#00H,exit
	mov  P1,#00H
exit:	ret
	
key_unchange:                                   ;確定按下,是不是已經(jīng)觸發(fā)
    jb   key_state.1,exit
	setb key_state.1
	mov  a,key_step
	jz   key_unchange11
key_unchange1:                                 ;確定按下
    rl  a
	mov  key_step,a
	ret	
key_unchange11 :
    mov key_step,#01H
	ret	
	
Timer0_intrrupt:                                   ;中斷服務(wù)函數(shù)
    clr  EA
    mov	TH1,#0D8H
	mov	TL1,#0EFH
	acall key_check		                   ;掃描按鍵
	setb EA
exit_interrupt:	
    reti

END
0
回復(fù)
2014-06-12 17:38
@又一個(gè)暑假
再貼上程序[圖片]K1bitP2.3;按鍵的I/O口key_stateEQU20H     ;消抖和防止一直觸發(fā)用的key_stepEQU21H;任務(wù)標(biāo)志ORG0000HSJMPSTARORG1BHLJMPTimer0_intrrupt;裝T1中斷服務(wù)程序star:movkey_state,#00H;初始化movkey_step,#00HmovP1,#0ffHmovIE,#88H;movTMOD,#10HmovTH1,#0D8HmovTL1,#0EFHsetbTR1;啟動(dòng)T18setbEAloop:key_switch:jbkey_step.0,key_low_step1        ;查詢要執(zhí)行什么任務(wù)jbkey_step.1,key_low_step2jbkey_step.2,key_low_step3jbkey_step.3,key_low_step4jbkey_step.4,key_low_step5jbkey_step.5,key_low_step6jbkey_step.6,key_low_step7jbkey_step.7,key_low_step8key_low_step0:movP1,#00H;上電就執(zhí)行的任務(wù)不一定是點(diǎn)LED燈jmploopkey_low_step1:movP1,#01H;任務(wù)一不一定是點(diǎn)LED燈jmploopkey_low_step2:movP1,#02H;任務(wù)二不一定是點(diǎn)LED燈jmploopkey_low_step3:movP1,#04H;;任務(wù)三不一定是點(diǎn)LED燈jmploopkey_low_step4:movP1,#08H;任務(wù)四不一定是點(diǎn)LED燈jmploopkey_low_step5:movP1,#10H;任務(wù)五不一定是點(diǎn)LED燈jmploopkey_low_step6:movP1,#20H;任務(wù)六不一定是點(diǎn)LED燈jmploopkey_low_step7:movP1,#40H;任務(wù)七不一定是點(diǎn)LED燈jmploopkey_low_step8:movP1,#80H;任務(wù)八不一定是點(diǎn)LED燈jmploopkey_check:;檢測按鍵jbK1,key_highkey_low:;有按下可能是抖動(dòng)jbkey_state.0,key_unchangesetbkey_state.0retkey_high:;沒按下movkey_state,#00Hmova,key_stepcjnea,#00H,exitmovP1,#00Hexit:retkey_unchange:;確定按下,是不是已經(jīng)觸發(fā)jbkey_state.1,exitsetbkey_state.1mova,key_stepjzkey_unchange11key_unchange1:;確定按下rlamovkey_step,aretkey_unchange11:movkey_step,#01HretTimer0_intrrupt:;中斷服務(wù)函數(shù)clrEAmovTH1,#0D8HmovTL1,#0EFHacallkey_check;掃描按鍵setbEAexit_interrupt:retiEND

最后來介紹一下程序要實(shí)現(xiàn)什么功能

 這個(gè)小程序主要是為了學(xué)習(xí)用定時(shí)器定時(shí)器來掃描按鍵

一上電就運(yùn)行

key_low_step0的任務(wù)
然后通過按鍵來切換任務(wù)(這里只是用每一個(gè)LED燈來表示一個(gè)任務(wù)當(dāng)然key_low_step0的任務(wù)全亮不是所有任務(wù)都執(zhí)行)
不是為了讓LED輪了點(diǎn)亮,如果是讓LED燈輪流點(diǎn)亮完全不用那么麻煩


0
回復(fù)
2014-06-16 01:30
@又一個(gè)暑假
最后來介紹一下程序要實(shí)現(xiàn)什么功能 這個(gè)小程序主要是為了學(xué)習(xí)用定時(shí)器定時(shí)器來掃描按鍵一上電就運(yùn)行key_low_step0的任務(wù)然后通過按鍵來切換任務(wù)(這里只是用每一個(gè)LED燈來表示一個(gè)任務(wù)當(dāng)然key_low_step0的任務(wù)全亮不是所有任務(wù)都執(zhí)行)不是為了讓LED輪了點(diǎn)亮,如果是讓LED燈輪流點(diǎn)亮完全不用那么麻煩
不錯(cuò),支持!只有不斷的學(xué)習(xí),技術(shù)才會(huì)有提高
0
回復(fù)
2014-06-20 14:18

0
回復(fù)
2014-06-20 14:23
@又一個(gè)暑假
[圖片]
 shcp	EQU		P2.0 ;	   //數(shù)據(jù)在上升沿進(jìn)入移位寄存器
 date1	EQU		P2.1 ;	    //串行數(shù)據(jù)輸入端
 clock	EQU		P2.2 ;     //上升沿時(shí)將數(shù)據(jù)輸出到并行端口
 send_data EQU  20H
 i	EQU     30H
	    ORG		0000H
	    ljmp	start
	
start:
		mov    i,#0
		 
loop:		
               clr    clock	
		mov    dptr,#tab               ;發(fā)送給第一片595
		movc   a,@a+dptr 
		mov    send_data,a
	       lcall  _74hc595_send_data
		mov    dptr,#tab1			   ;發(fā)送給第二片595
		mov    a,i
		movc   a,@a+dptr
		mov    send_data,a
		lcall  _74hc595_send_data
		setb   clock
		lcall  delay_ms 
		inc	   i
		mov    a,i
		cjne   a,#16,loop
		ljmp   start
		
		
_74hc595_send_data:				;74hc595發(fā)送數(shù)據(jù)子函數(shù)
		mov   r0,#00H
		mov   a,send_data
loop_07_1:
                clr   shcp 	
		rlc   a
		mov   date1,C
		setb  shcp 
		inc   r0		
		cjne  r0,#08H,loop_07_1
		ret
		
delay_ms :
		MOV   R6,#0ffH
DEL1:						
		MOV   R7,#250
		DJNZ  R7,$
		DJNZ  R6,DEL1
		RET
		
tab:  DB  0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
tab1: DB  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe

end
	
0
回復(fù)
2014-06-20 14:31
@又一個(gè)暑假
shcpEQUP2.0;//數(shù)據(jù)在上升沿進(jìn)入移位寄存器date1EQUP2.1;//串行數(shù)據(jù)輸入端clockEQUP2.2;//上升沿時(shí)將數(shù)據(jù)輸出到并行端口send_dataEQU20HiEQU30HORG0000Hljmpstartstart:movi,#0loop:clrclockmovdptr,#tab;發(fā)送給第一片595movca,@a+dptrmovsend_data,alcall_74hc595_send_datamovdptr,#tab1;發(fā)送給第二片595mova,imovca,@a+dptrmovsend_data,alcall_74hc595_send_datasetbclocklcalldelay_msincimova,icjnea,#16,loopljmpstart_74hc595_send_data:;74hc595發(fā)送數(shù)據(jù)子函數(shù)movr0,#00Hmova,send_dataloop_07_1:clrshcprlcamovdate1,Csetbshcpincr0cjner0,#08H,loop_07_1retdelay_ms:MOVR6,#0ffHDEL1:MOVR7,#250DJNZR7,$DJNZR6,DEL1RETtab:DB0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfftab1:DB0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfeend

這個(gè)程序就是傳說中的流水燈

今天不小心看到了74hc595連級的圖,就有了寫程序的沖動(dòng),最近學(xué)了點(diǎn)匯編,就用匯編寫一下

0
回復(fù)
2014-08-19 21:54
;/////////////////////////////////////////////////////////////////////////////////////////
;//矩陣鍵盤0—15按下按鍵顯示對應(yīng)的數(shù)值 ,沒按之前顯示"_"
;//
;////////////////////////////////////////////////////////////////////////////////////////
Key         	EQU     P3		;矩陣鍵盤接的I/O口
key_state		EQU		20H		;用來標(biāo)記消抖和防止多次觸發(fā)
key_step_buffer EQU		30H		;消抖時(shí)鍵值的保存
key_step    	EQU		35H		;存儲(chǔ)鍵值
key_count		EQU     36H		;查表計(jì)數(shù)
	
	ORG 	0000H
	SJMP	STAR
	ORG	    1BH
	LJMP	Timer0_intrrupt  ;裝T1中斷服務(wù)程序
;/////////////////////////////////////////////////////////////////////////////////////////
;//初始化
;//
;////////////////////////////////////////////////////////////////////////////////////////
star:	
    mov  key_state,#00H
	mov  key_step,#00H
	mov  key_step_buffer,#00H
	mov  P0,#0ffH
	mov  P1,#0ffH
	mov  P2,#0aaH
	mov  IE,#088H  ;
	mov	 TMOD,#010H
	mov	 TH1, #0D8H
	mov	 TL1, #0EFH
	setb TR1  ;啟動(dòng)T1
	setb EA
;/////////////////////////////////////////////////////////////////////////////////////////
;//主程序一直循環(huán)顯示
;//
;////////////////////////////////////////////////////////////////////////////////////////	
loop:
  	lcall keystep_disp            
   ; mov  P0,key_step;
    ljmp  loop 
;/////////////////////////////////////////////////////////////////////////////////////////
;//鍵值顯示程序
;//
;////////////////////////////////////////////////////////////////////////////////////////
keystep_disp:
		mov  a,key_step
		cjne a,#00H,keystep_disp_1   ;判斷是否都沒按過
		mov  P0,#0f7h       
		ret
keystep_disp_1:			
		mov    key_count,#0ffH		  
		mov    dptr,#kcodtab 		
rk_none:  			
		clr    a 
		movc   a,@a+dptr
		inc    dptr
		inc    key_count
		cjne   a,key_step,rk_none	 ;按鍵查表	         
		mov    a, key_count
		mov    dptr,#segtab2
		movc   a,@a+dptr             ;數(shù)碼管查表
		mov    p0,a
		lcall  delay	
		ret
;/////////////////////////////////////////////////////////////////////////////////////////
;//功能:按鍵掃描
;//方法:線反轉(zhuǎn)法
;////////////////////////////////////////////////////////////////////////////////////////
key_check:
		mov  Key,#0f0H
		mov	 a,Key
		cjne a,#0f0H,key_low
key_high:
		mov  key_state,#00H           ;沒鍵按下,標(biāo)志位清零
exit:
		ret
	
key_low:
		jb	 key_state.0,key_unchange_1;有鍵按下判斷是否抖動(dòng)
		setb key_state.0
		mov  Key,#0f0H
		mov	 a,Key
		orl  a,#0fH
		mov  Key,a
		mov  key_step_buffer,Key
		ret
			
key_unchange_1:
		jb   key_state.1,exit        
		mov  Key,#0f0H
		mov  a,Key
		orl  a,#0fH
		mov  Key,a
		mov  a,Key
		cjne a,Key_step_buffer,key_high
		setb key_state.1            ;確定有鍵按下,自鎖
		mov  key_step,Key_step_buffer
		ret
;/////////////////////////////////////////////////////////////////////////////////////////
;//Timer0中斷服務(wù)程序
;//功能:定時(shí)掃描按鍵
;////////////////////////////////////////////////////////////////////////////////////////	
Timer0_intrrupt:      
		mov	  TH1,#0D8H
		mov	  TL1,#0EFH
		acall key_check	         ;檢測按鍵
		
exit_interrupt:	
		reti
;/////////////////////////////////////////////////////////////////////////////////////////
;//延時(shí)子程序
;//
;////////////////////////////////////////////////////////////////////////////////////////	
delay:  mov   r3,#20
delay1: mov   r4,#50
        djnz  r4,$
        djnz  r3,delay1
        ret

;/////////////////////////////////////////////////////////////////////////////////////////
;//kcodtab 按鍵0——15對應(yīng)的鍵值
;//segtab2 共陽數(shù)碼管對應(yīng)的0——9
;////////////////////////////////////////////////////////////////////////////////////////
kcodtab: 
		db  11101110b,11011110b,10111110b,1111110b
		db  11101101b,11011101b,10111101b,1111101b
		db  11101011b,11011011b,10111011b,1111011b
		db  11100111b,11010111b,10110111b,1110111b
segtab2: 		  
		db  0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h
		db  080h,090h,088h,083h,0c6h,0a1h,086h,08eh	  
END

0
回復(fù)
發(fā)