久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4913|回復: 0
打印 上一主題 下一主題
收起左側

STC15W408單片機最小系統單LED顯示MORSE碼實時時鐘程序

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 高高的白楊 于 2021-1-10 21:38 編輯

      退休在家自學51單片機,學到定時器部分時聯想到無線電早期時使用的MORSE電報碼,便產生了用自己焊接的洞洞板51最小系統的時鐘控制MORSE碼來驗證自學成果的想法,在此與各位初學者共師兄習。
      第一次發貼,如有不當,請各位斧正。
      電路板圖是用Sprint-Layout 6.0 綠色漢化版畫的。
      圖1:電路板圖

      洞洞板正面,左側為STC15W408AS-DIP20 MPU及P5.5引腳所接紅色LED組成的51最小系統,右側為MAX232CPE組成的RS232電平轉換電路。板上LED為幾十年前的早期產品,其亮度明顯不如現在的貼片LED。
      圖2:洞洞板正面照片


      洞洞板背面,第一次焊洞洞板,水平有限,未能全部走錫。
      圖3:洞洞板背面照片

      因系統功能簡單,故程序用匯編書寫,其長度不足200行,并有較詳盡的語句注釋。
      程序如下:
  1. ;===========莫爾斯電碼單LED實時時鐘,經洞洞板搭建最小系統驗證無誤====================================
  2. ;===========STC15W408AS-DIP20,fosc=12MHz=============================================================
  3. ;===========T0為模式0,16位自動重裝,,用于基礎時鐘(中斷優先級為高)
  4. ;===========T2為模式0,16位自動重裝,用于MORSE電碼的編碼時長計時(中斷優先級為低)
  5. ;===========P5.5端口單個LED輸出莫爾斯電碼============================================================
  6. ;===========LED負極接P5.5端口,LED正極接+5V==========================================================
  7. ;===========整分鐘時LED依次以莫爾斯電碼顯示當前小時十位數、個位數,分鐘十位數、個位數================
  8. ;===========莫爾斯電碼時長:點1t=250ms,劃3t=750ms,點或劃間隔2t=500ms,數字之間間隔7t=1750ms=========   

  9. //I/O 口特殊功能寄存器                                        // 復位值   描述
  10.                 P5                EQU                      0C8H;   //xxxx,1111 端口5
  11.                 AUXR                EQU                        08EH;        //0000,0001        輔助寄存器
  12.                 IE2                        EQU                        0AFH;        //0000,0000 中斷允許就寄存器               
  13.                 T2H                        EQU                        0D6H;        //0000,0000        定時器2高8位寄存器       
  14.                 T2L                        EQU                        0D7H;        //0000,0000        定時器2低8位寄存器

  15. //define constants
  16.                 MIN_MARK        BIT                00H                        ;整分鐘標志位
  17.                 MORSE_LED        BIT                P5.5                ;LED輸出莫爾斯電碼
  18.                        
  19.                 HOUR                EQU                R0
  20.                 MIN                        EQU                R1
  21.                 SEC                        EQU                R2
  22. ;===========STC15W408AS-DIP20,fosc=12MHz=========================
  23.                         ORG                0000H
  24. RESET:
  25.                         AJMP        MAIN                        ;復位入口
  26.                         ORG                000BH
  27.                         AJMP        T0_ISR                        ;T0中斷服務入口
  28.                         ORG                0063H
  29.                         AJMP        T2_ISR                        ;T2中斷服務入口
  30.                         ORG                00B3H                        ;STC15W408AS中斷向量區后面第一個可用地址
  31. MAIN:
  32.                         MOV                SP,#0DFH                ;堆棧指針初值,堆棧空間為32字節
  33.                         CLR                A                                ;Clera A
  34.                         MOV                R0,A                        ;小時清零
  35.                         MOV                R1,A                        ;分清零
  36.                         MOV                R2,A                        ;秒清零
  37.                         MOV                R3,#20                        ;T0每秒中斷次數暫存地址
  38.                        
  39.                         ACALL        TIME_INIT                ;調用T0,T2初始化子程序
  40.                        
  41. LOOP:               
  42.                         JNB                MIN_MARK,$                ;非整分鐘則原地等待
  43.                         CLR                MIN_MARK                ;整分鐘標志位清零
  44.                         ACALL        TIME_NUM                ;調用分離當前時間十位及個位數字子程序

  45.                         SJMP        LOOP

  46. ;===========T0、T2初始化子程序====================================
  47. TIME_INIT:       
  48.                         ANL         AUXR,#00000000B        ;定時器T0及T2設置為時鐘12T模式,不允許T2工作
  49.                                                                         ;允許使用擴展RAM,T1作為UART1波特率發生器(釋放T2作為獨立定時器)
  50.                         ANL         TMOD,#11110000B        ;設置定時器T0模式為模式0,STC15W為16位自動重裝

  51.                         MOV         TL0,#0B0H                ;設置T0初值(低8位50ms@12MHz)
  52.                         MOV         TH0,#3CH                ;設置T0初值(高8位50ms@12MHz)
  53.                         CLR         TF0                                ;清除TF0標志
  54.                         SETB         TR0                                ;T0開始計時
  55.                         SETB        ET0                                ;允許T0中斷
  56.                        
  57.                         MOV         T2L,#0B0H                ;設置T2初值(低8位50ms@12MHz)
  58.                         MOV         T2H,#03CH                ;設置T2初值(高8位50ms@12MHz)
  59.                        
  60.                         SETB        EA                                ;CPU檢測中斷源(開總中斷)

  61.                         RET

  62. ;===========分離當前時間十位及個位數字子程序====================
  63. TIME_NUM:
  64.                         MOV                B,#10                        ;除數10
  65.                         MOV                A,HOUR                        ;當前小時數
  66.                         DIV                AB                                ;
  67.                         MOV                R4,A                        ;商(十位數)放在R4
  68.                         MOV                41H,B                        ;余數(個位數)放在41H
  69.                         ACALL        MORSE_CODE                ;調用莫爾斯字符取模子程序,傳遞參數在R4,顯示小時的十位數
  70.                         MOV                R4,41H                        ;將個位數傳給R4
  71.                         ACALL        MORSE_CODE                ;調用莫爾斯字符取模子程序,傳遞參數在R4,顯示小時的個位數
  72.                        
  73.                         MOV                B,#10                        ;除數10
  74.                         MOV                A,MIN                        ;當前分鐘數
  75.                         DIV                AB                                ;
  76.                         MOV                R4,A                        ;商(十位數)放在R4
  77.                         MOV                41H,B                        ;余數(個位數)放在41H
  78.                         ACALL        MORSE_CODE                ;調用莫爾斯字符取模子程序,傳遞參數在R4,顯示分鐘的十位數
  79.                         MOV                R4,41H                        ;將個位數傳給R4
  80.                         ACALL        MORSE_CODE                ;調用莫爾斯字符取模子程序,傳遞參數在R4,顯示分鐘的個位數
  81.                        
  82.                         RET

  83. ;===========莫爾斯字符取模子程序=================================
  84. MORSE_CODE:       
  85.                         MOV                DPTR,#MORSE_TABLE        ;莫爾斯電碼數字轉換表首地址
  86.                         MOV                R7,#05H                        ;莫爾斯電碼單個數字的信號個數
  87.                         MOV                A,R4                        ;將需取模的單位數字(存于R4)送入累加器A
  88.                         MOV                B,#05H                        ;莫爾斯電碼單個數字的信號個數
  89.                         MUL                AB                                ;要顯示的莫爾斯電碼數字查表地址偏移量
  90.                         MOV                40H,A                        ;地址偏移量暫存40H
  91. CATCH:
  92.                         MOVC        A,@A+DPTR                ;要顯示的莫爾斯電碼數字的第i(i=1~5)個點或劃的單位長度
  93.                         MOV                B,#05H                        ;單位長度1t對應T2中斷信號的倍數5
  94.                         MUL                AB                                ;要顯示的莫爾斯電碼數字的第i個點或劃對應T2中斷響應的次數
  95.                         MOV                R6,A                        ;將電碼間隔時長對應的中斷次數送入R6
  96.                         ACALL        DISPLAY                        ;調用LED莫爾斯電碼點或劃顯示子程序
  97.                         INC                40H                                ;下一個莫爾斯電碼點或劃的地址偏移量
  98.                         MOV                A,40H                        ;送地址偏移量至變址寄存器A
  99.                         DJNZ        R7,CATCH                ;一個莫爾斯電碼數字5個點或劃是否完整取模,不滿5次則繼續
  100.                         ACALL        SEVEN_DOT                ;調用數字之間間隔7t,在DISPLAY最后有1t,實際發6t
  101.                        
  102.                         RET               
  103.                        
  104. ;===========LED莫爾斯電碼顯示子程序============================
  105. DISPLAY:       
  106.                         CLR                MORSE_LED                ;P5.5為低電平,LED導通點亮
  107.                        
  108.                         ORL                IE2,#00000100B        ;T2開中斷
  109.                         ORL                AUXR,#00010000B        ;T2開始工作
  110.                        
  111.                         CJNE        R6,#00H,$                ;T2中斷數不足對應的電碼要求時,原地等待
  112.                                
  113.                         ANL                IE2,#11111011B        ;T2關中斷
  114.                         ANL                AUXR,#11101111B        ;T2停止工作
  115.                        
  116.                         SETB        MORSE_LED                ;LED關斷熄滅
  117.                         MOV                R6,#10H                        ;將電碼點或劃之間間隔時長2t(2*250ms=10*50ms)對應的中斷次數10送入R6
  118.                        
  119.                         ORL                IE2,#04H                ;T2開中斷
  120.                         ORL                AUXR,#00010000B        ;T2開始工作
  121.                        
  122.                         CJNE        R6,#00H,$                ;T2中斷數不足對應的電碼要求時,原地等待
  123.                                
  124.                         ANL                IE2,#0FBH                ;T2關中斷
  125.                         ANL                AUXR,#11101111B        ;T2停止工作                               
  126.        
  127.                         RET

  128. ;===========LED熄滅6t時長子程序=================================
  129. SEVEN_DOT:       
  130.                         SETB        MORSE_LED                ;LED關斷熄滅
  131.                         MOV                R6,#30                        ;將數字之間間隔7t-1t(6*250ms=30*50ms)對應的中斷次數30送入R6
  132.                        
  133.                         ORL                IE2,#04H                ;T2開中斷
  134.                         ORL                AUXR,#00010000B        ;T2開始工作
  135.                        
  136.                         CJNE        R6,#00H,$                ;T2中斷數不足對應的電碼要求時,原地等待
  137.                                
  138.                         ANL                IE2,#0FBH                ;T2關中斷
  139.                         ANL                AUXR,#11101111B        ;T2停止工作                       
  140.        
  141.                         RET
  142.                        
  143. ;===========T0中斷服務程序(基礎時鐘)============================
  144. T0_ISR:               
  145.                         PUSH        PSW                                ;保護現場
  146.                         PUSH          ACC                                ;
  147.                        
  148.                         DJNZ        R3,RETURN                ;T0中斷計數是否到20次,未到則返回
  149.                         MOV                R3,#20                        ;重新裝入T0計數基值(每秒T0中斷次數)
  150.                        
  151.                         INC                SEC                                ;“second”單元增1
  152.                         CJNE        SEC,#60,RETURN        ;是否到60秒,未到則返回
  153.                         SETB        MIN_MARK                ;整分鐘標志置1
  154.                         MOV                SEC,#00H                ;計滿60“秒”,“秒”單元清零
  155.                        
  156.                         INC                MIN                                ;“minute”單元增1
  157.                         CJNE        MIN,#60,RETURN        ;是否到60分,未到則返回
  158.                         MOV                MIN,#00H                ;計滿60“分”,“分”單元清零
  159.                        
  160.                         INC                HOUR                        ;“hour”單元增1
  161.                         CJNE        HOUR,#24,RETURN        ;是否到24hour,未到則返回
  162.                         MOV                HOUR,#00H                ;計滿24hour,“hour”單元清零

  163. RETURN:               
  164.                         POP                ACC                                ;恢復現場
  165.                         POP                PSW
  166.                        
  167.                         RETI

  168. ;===========T2中斷服務程序(莫爾斯碼時長控制)=========================
  169. T2_ISR:               
  170.                         PUSH        PSW                                ;保護現場
  171.                         PUSH          ACC                                ;
  172.                        
  173.                         DEC                R6                                ;T2中斷數減一
  174.                        
  175.                         POP                ACC                                ;恢復現場
  176.                         POP                PSW
  177.                         RETI
  178.                        
  179. ;===========莫爾斯電碼/數字0~9轉換表==================================
  180.                 ORG                01A0H
  181. MORSE_TABLE:
  182.                 DB                3,3,3,3,3,1,3,3,3,3,1,1,3,3,3,1,1,1,3,3,1,1,1,1,3
  183.                 DB                1,1,1,1,1,3,1,1,1,1,3,3,1,1,1,3,3,3,1,1,3,3,3,3,1

  184.                         END
復制代碼

用Keil 5編輯、編譯、鏈接程序;用STC-ISP下載程序至洞洞板,并上電運行驗證,程序運行無誤。   
    LED顯示的MORSE碼與時鐘對應的數字無誤,即MORSE_TABLE取碼正確。
    系統電源由一節18650鋰電池提供,LED熄滅實測電流為8.3mA,LED點亮實測電流為10.5mA。

    MORSE碼表的數字部分:
       數字        MORSE碼
        1          . _ _ _ _
        2          . . _ _ _
        3          . . . _ _
        4          . . . . _
        5          . . . . .
        6          _ . . . .
        7          _ _ . . .
        8          _ _ _ . .
        9          _ _ _ _ .
        0          _ _ _ _ _
    其中:
        .      點,一個時長基本單位t=250ms。
        _      劃,3t=750ms。

        一個數字內部的點或劃之間的時間間隔2t=500ms。
        數字與數字之間的時間間隔為7t=1750ms。  

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一a一片一级一片 | 在线欧美一区 | 亚洲欧美日韩中文在线 | 亚洲欧美日本在线 | 日韩在线小视频 | 99视频| 久热久热 | 日韩a视频 | 视频一区二区在线观看 | 亚洲国产一区二区三区在线观看 | 韩日有码| 久久99精品视频 | 伊人狠狠 | 日韩在线看片 | 久久精品亚洲欧美日韩久久 | 99re在线视频 | 中文无码日韩欧 | 日本视频一区二区三区 | 日韩插插 | 久草热播| 色婷婷精品国产一区二区三区 | 美女久久久久 | h视频在线免费 | 欧美中文一区 | 久久精品一区二区三区四区 | www.日韩| 国产 亚洲 网红 主播 | 免费在线观看一区二区三区 | 免费黄色片在线观看 | 亚洲一av | 日日日视频 | 91国自产| 国产伦精品一区二区三区在线 | av乱码| 日本不卡一区二区 | 91精品国产色综合久久 | 国产精品网址 | 亚洲三级在线观看 | 三级av在线 | 成人国产精品一级毛片视频毛片 | 久久影音先锋 |