新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 采用AT89C2051的數字可調穩壓電源單片機源程序

        采用AT89C2051的數字可調穩壓電源單片機源程序

        作者: 時間:2016-11-23 來源:網絡 收藏
        ORG 0000H ;定位
        LJMP MAIN ;跳轉到MAIN主程序
        ;
        ORG 0003H ;定位
        LJMP IT_0 ;轉入INT0的中斷服務程序
        ;
        ORG 000BH ;定位
        LJMP IT_1 ;轉入INT0的中斷服務程序
        ;
        ORG 0100H ;定位
        MAIN: MOV R6,#32H ;將50送R6
        ANL P3,#4FH ;將P3.4、P3.5、P3.7置為0,使輸出電壓為0.0V
        MOV P1,#0FFH ;將0FFH送P1
        SETB P3.0 ;將P3.0置1
        CLR P3.1 ;將P3.1置0
        MOV R2,#0CH ;將0CH送R2
        LCALL DELAY ;調用DELAY延時子程序
        SETB P3.1 ;將P3.1置1
        CLR P3.0 ;將P3.0置0
        MOV R2,#0CH ;將0CH送R2
        LCALL DELAY ;調用DELAY延時子程序
        DJNZ R6,MAIN ;若R6-1不等于0,跳轉到MAIN
        MOV P1,#00H ;將00H送P1
        MOV R2,#25H ;延時1S
        LCALL DELAY ;調用DELAY延時子程序
        SETB EX0 ;開INT0中斷
        SETB EX1 ;INT1中斷
        SETB EA ;開CPU中斷
        SETB IT0 ;將INT0設為負邊沿觸發
        SETB IT1 ;將INT0設為負邊沿觸發
        MOV R7,#00H ;將00H送R7
        LOOP: MOV A,R7 ;將R7值送A
        MOV DPTR,#TABLE0 ;將TABLE0地址送DPTR
        MOVC A,@A+DPTR ;查表,將查到的值送A
        ANL P3,A ;將A值與P3值相與,結果送P3
        MOV DPTR,#TABLE1 ;將TABLE1地址送DPTR
        MOVC A,@A+DPTR ;查表,將查到的值送A
        ORL P3,A ;將A值與P3值相或,結果送P3
        MOV DPTR,#TABLE2 ;將TABLE2地址送DPTR
        MOVC A,@A+DPTR ;查表,將查到的值送A
        MOV P1,A ;將A值送P1
        SETB P3.0 ;將P3.0置1
        CLR P3.1 ;將P3.1置0
        MOV R2,#0CH ;將0CH送R2
        LCALL DELAY ;調用DELAY延時子程序
        MOV DPTR,#TABLE3 ;將TABLE3地址送DPTR
        MOVC A,@A+DPTR ;查表,將查到的值送A
        MOV P1,A ;將A值送P1
        SETB P3.1 ;將P3.1置1
        CLR P3.0 ;將P3.0置0
        MOV R2,#0CH ;將0CH送R2
        LCALL DELAY ;調用DELAY延時子程序
        SJMP LOOP ;跳轉到LOOP循環
        ;
        ORG 0200H ;定位
        IT_0: MOV R2,#14H ;將14H置送R2
        LCALL DELAY ;調用DELAY延時子程序(延時約為57ms)
        JB P3.2,EXIT0 ;若INT0(P3.2)為1,說明為干擾信號,退出
        INC R7 ;若INT0(P3.2)為0,將R7加1
        CJNE R7,#07H,EXIT0 ;當R7值不為7時,跳轉到EXIT0
        MOV R7,#00H ;當R7值為7時,令R7等于0
        EXIT0: RETI ;INT0中斷返回
        ;
        IT_1: MOV R2,#14H ;將14H置送R2
        LCALL DELAY ;調用DELAY延時子程序(延時約為57ms)
        JB P3.3,EXIT1 ;若INT1(P3.3)為1,說明為干擾信號,退出
        DEC R7 ;若INT0(P3.3)為0,將R7減1
        CJNE R7,#0FFH,EXIT1 ;當R7值不為0FFH時,跳轉到EXIT1
        MOV R7,#06H ;當R7值為0FFH時,令R7等于6
        EXIT1: RETI ;INT1中斷返回
        ;
        TABLE0:DB 4FH,4FH,4FH,4FH,4FH,4FH,4FH,4FH ;控制信號
        TABLE1:DB 00H,10H,20H,30H,80H,90H,0A0H,0B0H ;控制信號
        TABLE2:DB 0CFH,0E6H,0EDH,0FDH,0EFH,03H ;第一數碼管位顯示信號
        TABLE3:DB 3FH,6DH,3FH,3FH,3FH,5BH ;第二數碼管位顯示信號

        ;以下為通用延時子程序
        ;當R2=0CH時,延時約為10ms;當R2=14H時,延時約為57ms
        DELAY:PUSH 02H ;將R2中的值推入堆箋
        LP1: PUSH 02H ;將R2中的值推入堆箋
        LP2: PUSH 02H ;將R2中的值推入堆箋
        LP3: DJNZ R2,LP3 ;若R2-1不為0,跳轉到LP3
        POP 02H ;將堆箋中值彈出到R2中
        DJNZ R2,LP2 ;若R2-1不為0,跳轉到LP2
        POP 02H ;將堆箋中值彈出到R2中
        DJNZ R2,LP1 ;若R2-1不為0,跳轉到LP1
        POP 02H ;將堆箋中值彈出到R2中
        DJNZ R2,DELAY ;若R2-1不為0,跳轉到DELAY
        RET ;子程序返回
        END ;結束
        主程序MAIN中,從MOV P1,#0FFH到SETB EX0的前一行,其作用是剛開機時,讓數碼管顯示全筆段,然后熄滅,以便于檢查數碼管的好壞,并做好準備。在初始化程序中,令IT0和IT1為1,是讓INT0和INT1變為負邊沿觸發,以達到每按一次S1或S2(無論時間長短,當然時間必須超過57ms),輸出電壓和數碼管改變一次。在LOOP循環中,先對P3相與后相或的目的是要將P3.4,P3.5,P3.7先清零后置位,相當于這一段代碼就是一個簡單的與或邏輯電路,具體操作情況讀者可參照電路圖自行分析。另外,主程序中的R7用于存放預設電壓的序號,其值在0~6之間變化,每一個值對應一個電壓值,依次為0—0.0V,1—3.0V,2—4.5V,3—5.0V,4—6.0V,5—9.0V,6—12V的電壓。由于經常用的都是這些電壓,所以上面幾個電壓對電子制作者來說已經足夠了。TABLE0中存放控制信號,TABLE1中存放第一個數碼管的字顯示信號,TABLE2中存放第二個數碼管的字顯示信號。當按S1時,輸出電壓就按照上述電壓依次增加;當按S2時,輸出電壓就依次減少。若此時電壓為0.0V,再按S2就會使輸出電壓變為12V;反之,若此時電壓為12V,再按S1就會使輸出電壓變為0.0V。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 吉安市| 唐山市| 新建县| 信阳市| 柳林县| 滁州市| 朝阳市| 朝阳区| 青川县| 莲花县| 措美县| 颍上县| 资阳市| 克拉玛依市| 同德县| 德化县| 纳雍县| 都兰县| 鸡西市| 冷水江市| 锦州市| 红安县| 都兰县| 赞皇县| 广灵县| 诸暨市| 广饶县| 平远县| 建始县| 云阳县| 龙口市| 衡水市| 大理市| 德庆县| 江永县| 成安县| 西安市| 兴义市| 武强县| 当阳市| 桃园县|