新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)匯編實(shí)驗(yàn)三:外部中斷實(shí)驗(yàn)

        單片機(jī)匯編實(shí)驗(yàn)三:外部中斷實(shí)驗(yàn)

        作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
        實(shí)驗(yàn)要求:

        由AT89S52內(nèi)部定時(shí)器0,按方式1工作,即作為16位定時(shí)器使用每0.05秒T1溢出中斷一次。P1口的P1.0~P1.8分別接8個(gè)發(fā)光二極管。要求編寫程序模擬一時(shí)序控制裝置。開機(jī)后第一秒鐘L1,L8亮,第二秒鐘L2,L7亮,第三秒鐘L3,L6亮,第四秒L4,L5亮,第五秒L3,L6亮,第六秒L2,L7亮,第七秒L1,L8亮,第八秒L1,L3,L5,L7亮,第九秒L2,L4,L6,L8亮,第十秒全亮,第十一秒全滅。然后再?gòu)念^循環(huán)。

        本文引用地址:http://www.104case.com/article/201612/324148.htm

        由鍵盤生成外部中斷信號(hào),當(dāng)任意鍵按下時(shí),為外部中斷請(qǐng)求信號(hào),此時(shí)L3,L4, L5,L6亮,持續(xù)時(shí)間為5秒。
        //This is the third program of the homework;
        //Name: WQ DATE: 2013214
        //In thisprogramwe used Intterput;
        ORG 0000H //****無(wú)條件轉(zhuǎn)移指令*******
        LJMP MAIN //LJMP 長(zhǎng)轉(zhuǎn)移指令 65535 (雙字節(jié))
        ORG 0003H //0003H 中斷程序I0入口地址
        LJMP WINTT0 //AJMP 絕對(duì)轉(zhuǎn)移
        ORG 000BH //000BH 計(jì)時(shí)器程序T0入口地址
        LJMP WT0 //SJMP 短轉(zhuǎn)移 -128——127
        // ORG 001BH //001BH 計(jì)時(shí)器程序T1入口地址 JMP 變址轉(zhuǎn)移 JMP @A+DPTR
        // LJMP WT1 //另外只要程序段的空間能合理分配不沖突就能隨便調(diào)用
        ORG 0050H
        MAIN:MOV DPTR,#TABLE
        MOV R1,#11 //R1做一個(gè)計(jì)數(shù)器 查表用
        CLR A //將A清零,用來(lái)尋址
        MOV R2,A //另一個(gè)計(jì)數(shù)器用來(lái)加減
        MOV TMOD,#01H
        MOV TH0,#4CH
        MOV TL0,#00H
        MOV R3,#20 //R3做一個(gè)計(jì)數(shù)器
        SETB EA //開總中斷
        SETB ET0 //允許計(jì)時(shí)器
        SETB TR0 //開啟計(jì)時(shí)器0
        // SETB TR1 //開啟計(jì)時(shí)器1
        SETB IT0 //邊沿觸發(fā)方式
        SETB EX0 //允許外部中斷0
        MOV P0,#0FFH
        OK1: MOV C,P3.4
        JNC KAISHI
        MOV C,P3.5
        JNC KAISHI
        MOV C,P3.6
        JNC KAISHI
        MOV C,P3.7
        JNC KAISHI
        SJMP OK1
        KAISHI:CLR P3.2
        SETB P3.2
        SJMP OK1

        //外部中斷程序的入口
        ORG 0AA0H
        WINTT0:PUSH TH0
        PUSH TL0
        CLR TR0 //關(guān)閉定時(shí)器0
        MOV P1,#3CH
        CALL DELAY1
        POP TL0
        POP TH0
        SETB TR0
        RETI
        ORG 0100H //計(jì)時(shí)器0程序
        WT0: MOV TH0,#4CH //計(jì)時(shí)器0置數(shù)
        MOV TL0,#00H
        DJNZ R3,RETN //1秒鐘到來(lái)了
        MOV R3,#20
        MOV A,R2 //
        MOVC A,@A+DPTR
        MOV P1,A
        INC R2 //指針加一
        DJNZ R1,RETN //不滿足調(diào)見返回主程序繼續(xù)計(jì)時(shí)
        MOV R1,#11 //循環(huán)之后置數(shù)
        MOV R2 ,#0 //循環(huán)之后清零
        RETN:RETI //中斷子程序的返回指令

        //延時(shí)函數(shù)
        ORG 0200H
        delay1:MOV R7,#0FFH
        DELY1:MOV R6,#0AAH
        DELY2:MOV R0,#024H
        DELY3: NOP//MOV P1,#00H
        DJNZ R0,DELY3
        DJNZ R6,DELY2
        DJNZ R7,DELY1
        RET
        TABLE:DB 7EH,0BDH,0DBH,0E7H,0DBH
        DB 0BDH,7EH,0AAH,55H,00H,0FFH //十六進(jìn)制數(shù)前面要加零
        END //主程序結(jié)束指令



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 如东县| 吉木萨尔县| 罗平县| 南华县| 平度市| 渭源县| 新民市| 临城县| 凉城县| 上饶县| 咸丰县| 蓬溪县| 叶城县| 视频| 唐海县| 安丘市| 凤城市| 彰化县| 墨竹工卡县| 海晏县| 临湘市| 榆树市| 宜兰市| 防城港市| 湘潭县| 综艺| 高安市| 宁陕县| 烟台市| 五家渠市| 盐城市| 犍为县| 米脂县| 忻城县| 河曲县| 湖北省| 北辰区| 临西县| 乾安县| 杭锦后旗| 左贡县|