匯編寫的LED呼吸燈 原碼 能運行的
單片機源程序如下:
- ;//=============================================
- ; Chip Register Define
- ;; Register R
- INDF EQU 0x00
- TMR0 EQU 0x01
- PCL EQU 0x02
- STATUS EQU 0x03
- C_B EQU 0
- DC_B EQU 1
- Z_B EQU 2
- PD_B EQU 3
- TO_B EQU 4
-
- FSR EQU 0x04
- PA EQU 0x05
- PB EQU 0x06
- PB0_B = 0
- PB1_B = 1
- PB2_B = 2
- PB3_B = 3
- PCON EQU 0x08
- BWUCON EQU 0x09
- PCHBUF EQU 0x0A
- ABPLCON EQU 0x0B
- BPHCON EQU 0x0C
-
- INTE EQU 0x0E
- T0IE EQU 0
- PBIE EQU 1
- INTIE EQU 2
- T1IE EQU 3
- WDTIE EQU 6
-
- INTF EQU 0x0F
- T0IF EQU 0
- PBIF EQU 1
- INTIF EQU 2
- T1IF EQU 3
- WDTIF EQU 6
- ;; Register F
- PS0CV EQU 0x0A
- BOBCON EQU 0x0C
- PCON1 EQU 0x0F
- T0EN EQU 0
- GIE EQU 7
-
- ;; Register S
- TMR1 EQU 0x00
- T1CR1 EQU 0x01
- T1EN EQU 0
- T1RL EQU 1
- T1OS EQU 2
-
- PWM1OAL EQU 6
- PWM1OEN EQU 7
-
- T1CR2 EQU 0x02
- PS1EN EQU 3
- T1CE EQU 4
- T1CS EQU 5
-
- PWM1DUTY EQU 0x03
- PS1CV EQU 0x04
- BZ1CR EQU 0x05
-
- IRCR EQU 0x06
- IREN EQU 0
- IRF57K EQU 1
- IRCSEL EQU 2
- IROSC358M EQU 7
-
- TBHP EQU 0x07
- TBHD EQU 0x08
-
- OSCCR EQU 0x0f
- SELHSC EQU 0
- STPHOSC EQU 1
- OPMD0 EQU 2
- OPMD1 EQU 3
- f EQU 1
- R EQU 1
- W EQU 0
- A EQU 0
- ;//======================================================
- ;; User Register Define (0x10~0x3F)
- R_ACC_Buf EQU 0x10
- R_Status_Buf EQU 0x11
- CycleCnt1 EQU 0x12
- DutyUpCnt1 EQU 0X13 ;positive
- DutyPosiCnt1 EQU 0X14 ;positive
- DutyNegaCnt1 EQU 0X15 ;negative
- DutyDownCnt1 EQU 0X16 ;negative
-
- DutyUpCnt EQU 0X17 ;positive
- DutyPosiCnt EQU 0X18 ;positive
- DutyNegaCnt EQU 0X19 ;negative
- DutyDownCnt EQU 0X1A ;negative
- CycleCnt EQU 0x1B
- TimerCnt0 EQU 0x1C
- TimerCnt1 EQU 0x1D
- Flag_Time EQU 0x1E
- Flag_1_1ms_B = 1
- Flag_1ms_B = 3
- Flag_20ms_B = 4
- Flag_500ms_B = 5
- Flag_Slp_ms_B = 6
- Flag_100us_B = 7
-
- Flag_Sys1 EQU 0x1F
- Red1Flg = 0
- Green1Flg = 1
- HiLow1Flag = 2
- Blue1Flg = 3
-
- Flag_Sys EQU 0x20
- HiLowFlag = 0 ;//PWM里面高低電平
- RotatFlg = 1 ;//向上向下變
- RedFlg = 2
- GreenFlg = 3
- BlueFlg = 4
- RotatCnt EQU 0x21
- LedCnt1 EQU 0x22
- LedCnt2 EQU 0x23
- ;//==========================================================
- ORG 0x00
- Reset: GOTO Main_Prog
- ;//==========================================================
- ;//ISR Vector
- ORG 0x08
- ISR_Prog:
- MOVAR R_ACC_Buf ;; 保留 ACC 及 Status 的狀態值
- SWAPR R_ACC_Buf, R
- SWAPR STATUS, A
- MOVAR R_Status_Buf
-
- BTRSS INTF, T0IF
- GOTO ISR_End
- MOVIA 0xFE
- MOVAR INTF ;; CLR TIMER0 FLAG
- BSR Flag_Time, Flag_100us_B
- //MOVIA 0xFE
- //XORAR PB,R
- MOVIA 165 ;; 165=200US 216=100US
- MOVAR TMR0
-
- ISR_End: SWAPR R_Status_Buf, A ;; 取回 ACC 及 Status 的狀態值
- MOVAR STATUS
- SWAPR R_ACC_Buf, A
- RETIE
- ;//==========================================================
- ;//Main Program
- Main_Prog:
- LCALL F_ClearAllRAM
- LCALL F_IOInit
- LCALL F_Timer0Set
- MOVIA 0x01 ;; ENABLE T0/T1 Interrupt
- MOVAR INTE
- ENI ;; Enable Goble Interrupt
-
- BSR Flag_Sys,HiLowFlag
- BSR Flag_Sys1,HiLow1Flag
- BSR Flag_Sys,RotatFlg
- MOVIA 1
- MOVAR DutyPosiCnt
- MOVIA 1
- MOVAR DutyPosiCnt1
- MOVIA 30
- MOVAR DutyNegaCnt
- MOVIA 30
- MOVAR DutyNegaCnt1
- BSR Flag_Sys,RedFlg ;RB1
- BSR Flag_Sys,GreenFlg;RB3
- BSR Flag_Sys,BlueFlg ;RB2
- BCR Flag_Sys,RotatFlg
- Main_Start:
- CLRWDT
- LCALL SystemTick
- LCALL BreathLed
- LCALL FallLed
- LCALL RiseLed
- GOTO Main_Start
- ;//===========================================
- BreathLed:BTRSS Flag_Sys,RotatFlg
- GOTO BreaEnd
- BCR Flag_Sys,RotatFlg
- INCR RotatCnt,1
-
- MOVIA 1
- SUBAR RotatCnt,A
- BTRSC STATUS,Z_B
- GOTO BreaLR1
-
- MOVIA 2
- SUBAR RotatCnt,A
- BTRSC STATUS,Z_B
- GOTO BreaLG1
-
- MOVIA 3
- SUBAR RotatCnt,A
- BTRSC STATUS,Z_B
- GOTO BreaLB1
-
- MOVIA 0
- MOVAR RotatCnt
- GOTO BreaLR1
-
- BreaLR1: BSR Flag_Sys,RedFlg
- BCR Flag_Sys,GreenFlg
- BCR Flag_Sys,BlueFlg
-
- BCR Flag_Sys1,Red1Flg
- BSR Flag_Sys1,Green1Flg
- BCR Flag_Sys1,Blue1Flg
- GOTO BreaEnd
-
- BreaLG1: BCR Flag_Sys,RedFlg
- BSR Flag_Sys,GreenFlg
- BCR Flag_Sys,BlueFlg
-
- BSR Flag_Sys1,Red1Flg
- BCR Flag_Sys1,Green1Flg
- BCR Flag_Sys,BlueFlg
- GOTO BreaEnd
-
- BreaLB1: BCR Flag_Sys,RedFlg
- BCR Flag_Sys,GreenFlg
- BSR Flag_Sys,BlueFlg
-
- BSR Flag_Sys1,Red1Flg
- BCR Flag_Sys1,Green1Flg
- BCR Flag_Sys1,Blue1Flg
- BreaEnd: RET
- ;//=================================================================
- ;//Fall 0
- FallLed: BTRSC Flag_Sys,RotatFlg
- GOTO RiseEnd
- BTRSS Flag_Sys,HiLowFlag
- GOTO Fall2
- Fall1: BTRSS Flag_Time,Flag_1ms_B
- GOTO FallEnd
- BCR Flag_Time,Flag_1ms_B
- INCR DutyUpCnt,1
-
- BTRSC Flag_Sys,RedFlg
- GOTO FallRED1
- BTRSC Flag_Sys,GreenFlg
- GOTO FallGREEN1
- BTRSC Flag_Sys,BlueFlg
- GOTO FallBLUE1
- GOTO FallEnd
- FallRED1: BCR PB,PB1_B
- GOTO Fall11
- FallGREEN1:
- BCR PB,PB3_B
- GOTO Fall11
- FallBLUE1:BCR PB,PB2_B
-
- Fall11: MOVR DutyPosiCnt,0
- SUBAR DutyUpCnt,0
- BTRSS STATUS,C_B
- GOTO FallEnd
- CLRR DutyUpCnt
-
- BCR Flag_Sys,HiLowFlag
- GOTO FallEnd
- Fall2: BTRSS Flag_Time,Flag_1ms_B
- GOTO FallEnd
- BCR Flag_Time,Flag_1ms_B
- INCR DutyDownCnt,1
-
- BTRSC Flag_Sys,RedFlg
- GOTO FallRED2
- BTRSC Flag_Sys,GreenFlg
- GOTO FallGREEN2
- BTRSC Flag_Sys,BlueFlg
- GOTO FallBLUE2
- GOTO FallEnd
-
- FallRED2: BSR PB,PB1_B
- GOTO Fall12
- FallGREEN2:
- BSR PB,PB3_B
- GOTO Fall12
- FallBLUE2:BSR PB,PB2_B
- Fall12: MOVR DutyNegaCnt,0
- SUBAR DutyDownCnt,0
- BTRSS STATUS,C_B
- GOTO FallEnd
- CLRR DutyDownCnt
- BSR Flag_Sys,HiLowFlag ;//one cycle is 20ms
-
- INCR CycleCnt,1
- MOVIA 5
- SUBAR CycleCnt,A
- BTRSS STATUS,C_B
- GOTO FallEnd
- CLRR CycleCnt
-
-
- INCR DutyPosiCnt,1
- DECR DutyNegaCnt,1
-
- MOVIA 30//62
- SUBAR DutyPosiCnt,A
- BTRSS STATUS,C_B
- GOTO FallEnd
-
- MOVIA 1
- MOVAR DutyPosiCnt
- MOVIA 30//62
- MOVAR DutyNegaCnt
- BSR Flag_Sys,RotatFlg
- FallEnd: RET
- ;//=================================================================
- ;//RISE 1
- RiseLed: BTRSS Flag_Sys,RotatFlg
- GOTO RiseEnd
- BTRSS Flag_Sys1,HiLow1Flag
- GOTO Rise2
- Rise1: BTRSS Flag_Time,Flag_1_1ms_B
- GOTO RiseEnd
- BCR Flag_Time,Flag_1_1ms_B
- INCR DutyUpCnt1,1
-
- BTRSC Flag_Sys1,Red1Flg
- GOTO RiseRED1
- BTRSC Flag_Sys1,Green1Flg
- GOTO RiseGREEN1
- BTRSC Flag_Sys1,Blue1Flg
- GOTO RiseBLUE1
- GOTO RiseEnd
- RiseRED1: BSR PB,PB1_B
- GOTO Rise11
-
- RiseGREEN1:BSR PB,PB3_B
- GOTO Rise11
- RiseBLUE1:BSR PB,PB2_B
-
- Rise11: MOVR DutyPosiCnt1,0
- SUBAR DutyUpCnt1,0
- BTRSS STATUS,C_B
- GOTO RiseEnd
- CLRR DutyUpCnt1
-
- BCR Flag_Sys1,HiLow1Flag
- GOTO RiseEnd
- Rise2: BTRSS Flag_Time,Flag_1_1ms_B
- GOTO RiseEnd
- BCR Flag_Time,Flag_1_1ms_B
- INCR DutyDownCnt1,1
-
- BTRSC Flag_Sys1,Red1Flg
- GOTO RiseRED2
- BTRSC Flag_Sys1,Green1Flg
- GOTO RiseGREEN2
- BTRSC Flag_Sys1,Blue1Flg
- GOTO RiseBLUE2
- GOTO RiseEnd
-
- RiseRED2: BCR PB,PB1_B
- GOTO Rise12
- RiseGREEN2:BCR PB,PB3_B
- GOTO Rise12
- RiseBLUE2:BCR PB,PB2_B
- Rise12: MOVR DutyNegaCnt1,0
- SUBAR DutyDownCnt1,0
- BTRSS STATUS,C_B
- GOTO RiseEnd
- CLRR DutyDownCnt1
- BSR Flag_Sys1,HiLow1Flag ;//one cycle is 20ms
-
- INCR CycleCnt1,1
- MOVIA 5
- SUBAR CycleCnt1,A
- BTRSS STATUS,C_B
- GOTO RiseEnd
- CLRR CycleCnt1
-
-
- INCR DutyPosiCnt1,1
- DECR DutyNegaCnt1,1
-
- MOVIA 30
- SUBAR DutyPosiCnt1,A
- BTRSS STATUS,C_B
- GOTO RiseEnd
-
- MOVIA 1
- MOVAR DutyPosiCnt1
- MOVIA 30
- MOVAR DutyNegaCnt1
- BCR Flag_Sys,RotatFlg
- RiseEnd: RET
- ;//=================================================================
- ;//SystemTick
- SystemTick:
- BTRSS Flag_Time, Flag_100us_B
- GOTO STickEnd
- BCR Flag_Time, Flag_100us_B
- INCR TimerCnt0,1
- INCR TimerCnt1,1
- // MOVIA 3
- // SUBAR TimerCnt0,A
- // BTRSS STATUS,C_B
- // GOTO STick11
- // CLRR TimerCnt0
- BSR Flag_Time,Flag_1_1ms_B
-
- //STick11: MOVIA 100
- // SUBAR TimerCnt1,A
- // BTRSS STATUS,C_B
- // GOTO STickEnd
- // CLRR TimerCnt1
- BSR Flag_Time,Flag_1ms_B
- STickEnd: RET
- ;//==================================================================
- ;;Clear RAM 0x10~0x3f
- F_ClearAllRAM:
- MOVIA 0x2f
- MOVAR 0x10
- MOVIA 0X11
- MOVAR FSR
- L_Clear_Next_Byte:
- CLRR INDF
- INCR FSR, R
- DECRSZ 10H, R
- LGOTO L_Clear_Next_Byte
- CLRR FSR
- RET
- ;//====================================================================
- ;//IO 初始化
- F_IOInit:
- MOVIA 0xff
- MOVAR PB ;; 初始值
- MOVIA 00000001
- IOST PB ;; 設定為IO狀態 0=Output, 1=Input
-
- MOVIA 0x80 ;; 設定為 WDT(B7)=1:EN/0:DIS, PB0(B6)=1:INT/0:GPIO, LVR(B3)=1:EN/0:DIS
- MOVAR PCON
- RET
- ;//====================================================================
- ;//Time0 初始化
- ;//Madify Data: 2014.12.11
- ;//T=(1/intruction clk)*分頻*TMR0
- ;// = ((1/4MHz)*4)*4*256(00H)
- ;// = 1.024ms
- F_Timer0Set:
- MOVIA 0xFE
- MOVAR INTF ;; Clr Timer0 Flag
- MOVIA 00000001
- T0MD
- MOVIA 0 ;; 500US
- MOVAR TMR0
- RET
- end
- ;//==========================================================
- END
- ;//==========================================================
- ;Program END
復制代碼
所有資料51hei提供下載:
main.zip
(2.83 KB, 下載次數: 8)
2018-11-12 09:15 上傳
點擊文件名下載附件
匯編程序 下載積分: 黑幣 -5
|