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

標(biāo)題: 通過串口發(fā)送01、02、03控制51單片機p10輸出5Khz,30、60、90%占空比pwm波 [打印本頁]

作者: huxingjie9    時間: 2026-1-16 18:50
標(biāo)題: 通過串口發(fā)送01、02、03控制51單片機p10輸出5Khz,30、60、90%占空比pwm波
  1. #include <reg52.h>

  2. // 定義端口
  3. sbit PWM_OUT = P1^0;

  4. // PWM參數(shù)定義
  5. #define PWM_PERIOD 200    // PWM周期200μs(對應(yīng)5KHz)
  6. unsigned int high_time = 60; // 默認(rèn)高電平時間60μs(30%占空比)
  7. unsigned int count = 0;      // 定時器計數(shù)變量

  8. // 串口初始化函數(shù)(9600波特率,晶振11.0592MHz)
  9. void UART_Init() {
  10.     TMOD |= 0x20;  // 定時器1工作在模式2(8位自動重裝)
  11.     TH1 = 0xFD;    // 9600波特率初值(11.0592MHz)
  12.     TL1 = 0xFD;
  13.     TR1 = 1;       // 啟動定時器1
  14.    
  15.     SCON = 0x50;   // 串口工作在模式1,允許接收
  16.     EA = 1;        // 開啟總中斷
  17.     ES = 1;        // 開啟串口中斷
  18. }

  19. // 定時器0初始化(用于PWM生成,1μs中斷一次)
  20. void Timer0_Init() {
  21.     TMOD |= 0x01;  // 定時器0工作在模式1(16位定時器)
  22.     TH0 = (65536 - 10) / 256;  // 11.0592MHz晶振,10μs中斷一次
  23.     TL0 = (65536 - 10) % 256;
  24.     ET0 = 1;       // 開啟定時器0中斷
  25.     TR0 = 1;       // 啟動定時器0
  26. }

  27. // 定時器0中斷服務(wù)函數(shù)(生成PWM)
  28. void Timer0_ISR() interrupt 1 {
  29.     // 重裝定時器初值
  30.     TH0 = (65536 - 10) / 256;
  31.     TL0 = (65536 - 10) % 256;
  32.    
  33.     count += 10;   // 累計時間(每次中斷10μs)
  34.    
  35.     // PWM生成邏輯
  36.     if(count < high_time) {
  37.         PWM_OUT = 1;  // 高電平
  38.     } else if(count < PWM_PERIOD) {
  39.         PWM_OUT = 0;  // 低電平
  40.     } else {
  41.         count = 0;    // 周期重置
  42.     }
  43. }

  44. // 串口中斷服務(wù)函數(shù)(接收指令)
  45. void UART_ISR() interrupt 4 {
  46.     unsigned char cmd;
  47.     if(RI) {        // 接收中斷標(biāo)志位
  48.         RI = 0;     // 清除接收中斷標(biāo)志
  49.         cmd = SBUF; // 讀取接收的數(shù)據(jù)
  50.         
  51.         // 根據(jù)指令設(shè)置占空比
  52.         if(cmd == 0x01) {
  53.             high_time = 60;  // 30%占空比(60μs高電平)
  54.         } else if(cmd == 0x02) {
  55.             high_time = 120; // 60%占空比(120μs高電平)
  56.         } else if(cmd == 0x03) {
  57.             high_time = 180; // 90%占空比(180μs高電平)
  58.         }
  59.     }
  60. }

  61. // 主函數(shù)
  62. void main() {
  63.     UART_Init();    // 初始化串口
  64.     Timer0_Init();  // 初始化定時器0
  65.     PWM_OUT = 0;    // 初始電平置低
  66.    
  67.     while(1) {
  68.         // 主循環(huán)空操作,PWM和串口由中斷處理
  69.     }
  70. }
復(fù)制代碼

作者: 歐陽云天    時間: 2026-2-2 22:10
弱弱的問一句,這代碼是怎么復(fù)制到帖子里的,我只能當(dāng)純文本復(fù)制過來,這個像圖片一樣帶行數(shù)的是怎么弄的,我發(fā)的就是這樣的
void init_uart( )                //2400bps@11.0592MHz
        {
         PCON &= 0x7F;                //波特率不倍速
         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
         AUXR &= 0xFB;                //定時器時鐘12T模式
         BRT = 0xF4;                        //設(shè)置定時重載值
         AUXR |= 0x01;                //串口1使用獨立波特率發(fā)射器為波特率發(fā)生器
         //AUXR |= 0x10;                //啟動獨立波特率發(fā)射器
        }
作者: vscos    時間: 2026-2-17 09:44
歐陽云天 發(fā)表于 2026-2-2 22:10
弱弱的問一句,這代碼是怎么復(fù)制到帖子里的,我只能當(dāng)純文本復(fù)制過來,這個像圖片一樣帶行數(shù)的是怎么弄的, ...

在發(fā)送信息的窗口上有對尖括號,那是插入代碼的地方,把你的代碼插進去就行了
作者: ljy5606    時間: 2026-2-28 11:33
不錯的代碼,學(xué)習(xí)中




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1