欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1906|回復: 1
收起左側

用python腳本交互式生成STC8單片機初始化代碼

[復制鏈接]
ID:912806 發表于 2021-11-9 16:14 | 顯示全部樓層 |閱讀模式
用python寫了個支持STC8A/8F(stc8a)和STC8A8K64D4(stc8d)的初始化腳本, 可以根據配置生成寄存器的初始化代碼.
現在實現了系統時鐘, 定時器1,2,3和串口1的初始化配置, 支持任意分頻和串口波特率配置
這樣的工具會有需求么?

配置
  1. Please choose a MCU type(請選擇MCU類型) ['stc8a', 'stc8d']
  2. :stc8a
  3. Select language. Currently [0]:
  4.   0: English
  5.   1: 中文
  6. :1
  7. (Cmd) clock
  8. ==== 系統時鐘配置開始 ====
  9. MCU時鐘源. 當前選擇[0]:
  10.   0: 內置高頻震蕩器
  11.   1: 外部時鐘或外置晶振
  12.   2: 內置32KHz低頻晶振
  13. :0
  14. 選擇頻率. 當前選擇[1]:
  15.   0: 22.1184MHz
  16.   1: 24MHz
  17. :1
  18. 頻率微調級別. 當前選擇[0]:
  19.   0: 無調整
  20.   1: +0.01%
  21.   2: +0.04%
  22.   3: +0.10%
  23. :
  24. 系統時鐘 SYSCLK 的分頻系數, 取值在[0, 255]區間內, 系統時鐘(SYSCLK) = FOSC / 分頻系數. 當前選擇[0]:
  25. :
  26. 系統時鐘輸出分頻系數. 當前選擇[0]:
  27.   0: 不輸出
  28.   1: SYSCLK/1
  29.   2: SYSCLK/2
  30.   3: SYSCLK/4
  31.   4: SYSCLK/8
  32.   5: SYSCLK/16
  33.   6: SYSCLK/32
  34.   7: SYSCLK/64
  35.   8: SYSCLK/128
  36. :
  37. ==== 系統時鐘配置結束 ====
  38. (Cmd) uart1
  39. ==== 串口1配置開始 ====
  40. 串口計數模式. 當前選擇[0]:
  41.   0: Mode 0, 同步移位串行方式
  42.   1: Mode 1, 可變波特率8位數據方式
  43.   2: Mode 2, 固定波特率9位數據方式
  44.   3: Mode 3, 可變波特率9位數據方式
  45. :1
  46. 串口1模式1/2/3 雙倍波特率模式. 當前選擇[0]:
  47.   0: 不使用
  48.   1: 雙倍波特率模式
  49. :1
  50. 串口1波特率來源. 當前選擇[1]:
  51.   0: 定時器1
  52.   1: 定時器2
  53. :
  54. 定時器2 1T模式/12T模式). 當前選擇[0]:
  55.   0: 12T模式
  56.   1: 1T模式
  57. :1
  58. 請輸入頻率, 取值于 [91.55,  6000000.00]區間內:
  59. [366.21]:115200
  60. 開啟 UART1 接收(RX mode). 當前選擇[0]:
  61.   0: RX 關閉
  62.   1: RX 開啟
  63. :1
  64. 串口1幀錯誤檢測. 當前選擇[0]:
  65.   0: 不作錯誤檢測
  66.   1: 啟用錯誤檢測, 此時 SCON 的SM0/FE作為FE使用
  67. :0
  68. ==== 串口1配置結束 ====
  69. (Cmd) timer1
  70. ==== 定時器1 配置開始 ====
  71. 定時器1運行狀態. 當前選擇[0]:
  72.   0: 停止
  73.   1: 運行
  74. :1
  75. 定時器1 1T模式/12T模式). 當前選擇[0]:
  76.   0: 12T模式
  77.   1: 1T模式
  78. :1
  79. 定時器1功能. 當前選擇[0]:
  80.   0: 定時
  81.   1: 計數
  82. :0
  83. 定時器1打開條件. 當前選擇[0]:
  84.   0: TR1為高即運行定時器/計數器1
  85.   1: 只有在INT1腳為高時, TR1為高才運行定時器/計數器1
  86. :0
  87. 定時器1時鐘輸出. 當前選擇[0]:
  88.   0: 關閉
  89.   1: 輸出至P3.4
  90. :0
  91. 定時器1的定時器模式. 當前選擇[0]:
  92.   0: 16位自動重載模式, 當[TH1,TL1]中的16位計數值溢出時,系統會自動將內部16位重載寄存器中的重載值裝入[TH1,TL1]中
  93.   1: 16位不自動重載模式, 當[TH1,TL1]中的16位計數值溢出時,定時器1將從0開始計數
  94.   2: 8位自動重載模式, 當TL1中的8位計數值溢出時,系統會自動將TH1中的重載值裝入TL1中
  95.   3: T1停止工作
  96. :0
  97. 請輸入頻率, 取值于 [183,  12000000]區間內:
  98. [183]:200
  99. ==== 定時器1 配置結束 ====
  100. (Cmd) timer0
  101. ==== 定時器0 配置開始 ====
  102. 定時器0運行狀態. 當前選擇[0]:
  103.   0: 停止
  104.   1: 運行
  105. :1
  106. 定時器0 1T模式/12T模式). 當前選擇[0]:
  107.   0: 12T模式
  108.   1: 1T模式
  109. :1
  110. 定時器0功能. 當前選擇[0]:
  111.   0: 定時
  112.   1: 計數
  113. :0
  114. 定時器0打開條件. 當前選擇[0]:
  115.   0: TR0為高即運行定時器/計數器0
  116.   1: 只有在INT0腳為高時, TR0為高才運行定時器/計數器0
  117. :0
  118. 定時器0的定時器模式. 當前選擇[0]:
  119.   0: 16位自動重載模式, 當[TH0,TL0]中的16位計數值溢出時,系統會自動將內部16位重載寄存器中的重載值裝入[TH0,TL0]中
  120.   1: 16位不自動重載模式, 當[TH0,TL0]中的16位計數值溢出時,定時器將從0開始計數
  121.   2: 8位自動重載模式, 當TL0中的8位計數值溢出時,系統會自動將TH0中的重載值裝入TL0中
  122.   3: 不可屏蔽中斷的16位自動重載模式, 與模式0相同,不可屏蔽, 中斷優先級最高且不可關閉, 可用作操作系統的系統節拍定時器或系統監控定時器
  123. :2
  124. 定時器0時鐘輸出. 當前選擇[0]:
  125.   0: 關閉
  126.   1: 輸出至P3.5
  127. :0
  128. 請輸入定時器0的頻率, 取值于 [46875,  12000000]區間內:
  129. [46875]:50000
  130. ==== 定時器0 配置結束 ====
  131. (Cmd) timer0
  132. ==== 定時器0 配置開始 ====
  133. 定時器0運行狀態. 當前選擇[1]:
  134.   0: 停止
  135.   1: 運行
  136. :
  137. 定時器0 1T模式/12T模式). 當前選擇[1]:
  138.   0: 12T模式
  139.   1: 1T模式
  140. :
  141. 定時器0功能. 當前選擇[0]:
  142.   0: 定時
  143.   1: 計數
  144. :
  145. 定時器0打開條件. 當前選擇[0]:
  146.   0: TR0為高即運行定時器/計數器0
  147.   1: 只有在INT0腳為高時, TR0為高才運行定時器/計數器0
  148. :
  149. 定時器0的定時器模式. 當前選擇[2]:
  150.   0: 16位自動重載模式, 當[TH0,TL0]中的16位計數值溢出時,系統會自動將內部16位重載寄存器中的重載值裝入[TH0,TL0]中
  151.   1: 16位不自動重載模式, 當[TH0,TL0]中的16位計數值溢出時,定時器將從0開始計數
  152.   2: 8位自動重載模式, 當TL0中的8位計數值溢出時,系統會自動將TH0中的重載值裝入TL0中
  153.   3: 不可屏蔽中斷的16位自動重載模式, 與模式0相同,不可屏蔽, 中斷優先級最高且不可關閉, 可用作操作系統的系統節拍定時器或系統監控定時器
  154. :0
  155. 定時器0時鐘輸出. 當前選擇[0]:
  156.   0: 關閉
  157.   1: 輸出至P3.5
  158. :
  159. 請輸入定時器0的頻率, 取值于 [183,  12000000]區間內:
  160. [183]:500
  161. ==== 定時器0 配置結束 ====
復制代碼

明細
  1. (Cmd) info
  2. MCU時鐘源: 內置高頻震蕩器
  3. 內部24MHz振蕩器開關: 開啟
  4. 外部時鐘源開關: 關閉
  5. 內部32K振蕩源開關: 關閉
  6. 選擇頻率: 24MHz
  7. 振蕩源或時鐘頻率, 值在[16000000, 28000000]區間內: 24000000
  8. 內部時鐘振蕩器頻率調整, 取值范圍[0, 255], 每級增加大約0.24%: assigned by T24M
  9. 頻率微調級別: 無調整
  10. FOSC: 24.000000MHz
  11. 系統時鐘 SYSCLK 的分頻系數, 取值在[0, 255]區間內, 系統時鐘(SYSCLK) = FOSC / 分頻系數: 0x00
  12. SYSCLK: 24.000000MHz
  13. 系統時鐘輸出分頻系數: 不輸出

  14. 定時器0運行狀態: 運行
  15. 定時器0 1T模式/12T模式): 1T模式
  16. 定時器0功能: 定時
  17. 定時器0打開條件: TR0為高即運行定時器/計數器0
  18. 定時器0的定時器模式: 16位自動重載模式, 當[TH0,TL0]中的16位計數值溢出時,系統會自動將內部16位重載寄存器中的重載值裝入[TH0,TL0]中
  19. 定時器0時鐘輸出: 關閉
  20. TIMER0 Freq: 500

  21. 定時器1運行狀態: 運行
  22. 定時器1 1T模式/12T模式): 1T模式
  23. 定時器1功能: 定時
  24. 定時器1打開條件: TR1為高即運行定時器/計數器1
  25. 定時器1時鐘輸出: 關閉
  26. 定時器1的定時器模式: 16位自動重載模式, 當[TH1,TL1]中的16位計數值溢出時,系統會自動將內部16位重載寄存器中的重載值裝入[TH1,TL1]中
  27. TIMER1 Freq: 200

  28. 定時器2運行狀態: 運行
  29. 定時器2 1T模式/12T模式): 1T模式
  30. 定時器2功能: 定時
  31. 定時器2時鐘輸出: 關閉
  32. TIMER2 Freq: 452830

  33. 串口計數模式: Mode 1, 可變波特率8位數據方式
  34. 串口1模式1/2/3 雙倍波特率模式: 雙倍波特率模式
  35. 串口1波特率來源: 定時器2
  36. UART1 Baud Rate: 113207
  37. 開啟 UART1 接收(RX mode): RX 開啟
  38. 串口1幀錯誤檢測: 不作錯誤檢測
復制代碼

生成寄存器初始值代碼
  1. (Cmd) gen
  2. Code for current configuration:
  3. MCU Type: STC8A,STC8C,STC8F Series

  4. #include "stc8.h"

  5. void clock_init()
  6. {
  7.     // [  BAH,0,0x00]: 外設端口切換寄存器2
  8.     P_SW2      = 0x80;
  9.     // [FE01H,1,0x00]: 時鐘分頻寄存器
  10.     CLKDIV     = 0x00;
  11.     // [  9FH,0,0x00]: IRC頻率調整寄存器
  12.     IRTRIM     = T24M;
  13.     // [  9EH,0,0x00]: IRC頻率微調寄存器
  14.     LIRTRIM    = 0x00;
  15.     // [  BAH,0,0x00]: 外設端口切換寄存器2
  16.     P_SW2      = 0x00;

  17. }

  18. void timer_init()
  19. {
  20.     // [  BAH,0,0x00]: 外設端口切換寄存器2
  21.     P_SW2      = 0x80;
  22.     // [  D6H,0,0x00]: 定時器2高字節
  23.     T2H        = 0xFF;
  24.     // [  D7H,0,0x00]: 定時器2低字節
  25.     T2L        = 0xCB;
  26.     // [  BAH,0,0x00]: 外設端口切換寄存器2
  27.     P_SW2      = 0x00;
  28.     // [  87H,0,0x30]: 電源控制寄存器
  29.     PCON       = 0xB0;
  30.     // [  8EH,0,0x01]: 輔助寄存器
  31.     AUXR       = 0xD5;
  32.     // [  88H,0,0x00]: 定時器控制寄存器
  33.     TCON       = 0x50;
  34.     // [  8CH,0,0x00]: 定時器0高8位寄存器
  35.     TH0        = 0xA2;
  36.     // [  8AH,0,0x00]: 定時器0低8位寄存器
  37.     TL0        = 0x40;
  38.     // [  8DH,0,0x00]: 定時器1高8位寄存器
  39.     TH1        = 0x15;
  40.     // [  8BH,0,0x00]: 定時器1低8位寄存器
  41.     TL1        = 0xA0;
  42. }

  43. void uart_init()
  44. {
  45.     // [  98H,0,0x00]: 串口1控制寄存器
  46.     SCON       = 0x50;
  47.     // [  87H,0,0x30]: 電源控制寄存器
  48.     PCON       = 0xB0;
  49.     // [  8EH,0,0x01]: 輔助寄存器
  50.     AUXR       = 0xD5;
  51. }

復制代碼

評分

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

查看全部評分

回復

使用道具 舉報

ID:277550 發表于 2021-11-9 17:32 | 顯示全部樓層

STC自身的工具,有這樣的功能吧,以后的版本,不知道會不會保留這功能。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表