色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機匯編中斷程序

          51單片機匯編中斷程序

          作者: 時間:2016-11-23 來源:網(wǎng)絡 收藏



          首先,介紹一下51單片機定時計數(shù)器,51有兩個定時計數(shù)器,分別為T0,T1,基本一樣,;有一點不同,下面我們介紹定時計數(shù)器T0
          ;了解8051的timer0中斷的程序寫法,用中斷法產(chǎn)生定時
          ;上面顯示的是proteus仿真圖,下面的是源程序
          ;說明:(源程序中的中斷入口地址很重要(這個是固定的),程序中斷時,會在對應中斷固定的
          ;入口地址進入,因為規(guī)定的相隔入口間的空進有限,只能用跳轉指令跳轉,最終用RETI強制返回
          ;這個程序把所有的中斷入口地址都寫上了,沒有用到的,用RETI直接屏蔽)
          ;運行結果是使led燈明一下,暗一下。

          COUNT EQU 9217;對于11.0592的晶振來說,延時10ms
          LED EQU P1.1


          ORG 0000H
          LJMP RESET ;開始時跳轉轉到初始化程序中

          ORG 0003H ;外部中斷0
          RETI

          ORG 000BH ;定時器/計數(shù)器T0入口地址
          LJMP INT_TIMER0 ;跳轉到定時器/計數(shù)器中斷服務程序中去

          ORG 0013H ;外部中斷1
          RETI

          ORG 001BH ;定時器/計數(shù)器T1
          RETI

          ORG 0023H ;串行口中斷
          RETI

          ORG 0030H
          RESET:
          MOV R0,#00H
          DJNZ R0,$ ;剛開始,先進行少量的延時,是各種工作寄存器準備好
          CLR LED


          MOV TMOD,#00000001B ;設置定時器T0工作在方式1(16位)

          MOV TH0,#HIGH(65536-COUNT);設置初值(關于怎么計算,很多書上都有)
          MOV TL0,#LOW(65536-COUNT)
          ;MOV TH0,#(65536-COUNT)/256;取高八位數(shù)據(jù)(這是第二種方法)
          ;MOV TL0,#255 ;取底五位(為最大了)

          CLR TF0 ;先把溢出標志位清零
          SETB TR0 ;開始計時
          SETB EA ;全局中斷打開
          SETB ET0 ;定時器/計數(shù)器T0溢出中斷打開

          MOV R2,#00H ;作為定時器累加器使用

          LOOP: SJMP LOOP ;在此循環(huán),等待中斷


          INT_TIMER0: ;當TF0=1,跳轉到下面的中斷服務程序中
          INC R2 ;使R2自增一
          CLR TF0 ;重新置中斷標志位為0
          MOV TH0,#(65536-COUNT)/256 ; 重新符初值(因為溢出后變成0了)
          MOV TL0,#255
          CJNE R2,#5,RETURN ;讓燈明暗相間50ms
          MOV R2, #00H
          CPL LED ;讓燈明暗交替變化
          RETURN:
          RETI

          END

          ;程序寫完了(并不是很難,不過就是配置一下定時器,在中斷中寫點處理程序罷了


          評論


          技術專區(qū)

          關閉