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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1683|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51低速數(shù)字信號(hào)發(fā)生和采樣器 51單片機(jī)Python串口上位機(jī)代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

簡(jiǎn)介:配合Python上位機(jī)獨(dú)立控制51單片機(jī)的4個(gè)GPIO端口的輸入輸出,在9600波特率下通過(guò)上位機(jī)控制MCU翻轉(zhuǎn)IO速率達(dá)到218Hz,可適用于低速情況下的自動(dòng)化測(cè)試場(chǎng)景。本項(xiàng)目?jī)H供學(xué)習(xí)娛樂(lè),可能存在未知問(wèn)題和疏漏,不建議用于真實(shí)場(chǎng)景,對(duì)此不負(fù)任何責(zé)任。

關(guān)于通信協(xié)議:
默認(rèn)波特率為9600,使用偶校驗(yàn)
數(shù)據(jù)位76543210
說(shuō)明P3端口
read  = 0
write = 1
P2端口
read  = 0
write = 1
P1端口
read  = 0
write = 1
P0端口
read  = 0
write = 1
使能P3端口使能P2端口使能P1端口使能P0端口


示例:






MCU代碼:

Python上位機(jī)代碼:




  1. # TEST = 0x00
  2. # ERASE_EXTERNAL_FLASH_SECTOR = 0x06
  3. # WRITE_EXTERNAL_FLASH_SECTOR = 0x07
  4. # READ_SECTOR = 0x08
  5. # RESET = 0x04
  6. import serial

  7. PORT   = 0b1111
  8. PORT_0 = 0b0001
  9. PORT_1 = 0b0010
  10. PORT_2 = 0b0100
  11. PORT_3 = 0b1000

  12. PORT_READ    = 0b00000000
  13. PORT_WRITE   = 0b11110000
  14. PORT_0_WRITE = 0b00010000
  15. PORT_1_WRITE = 0b00100000
  16. PORT_2_WRITE = 0b01000000
  17. PORT_3_WRITE = 0b10000000

  18. def GPIO_CTL(serial_f,PORT, OP, data = []):
  19.     readSize = 0
  20.     readSize += (PORT & PORT_0 > 0)
  21.     readSize += (PORT & PORT_1 > 0)
  22.     readSize += (PORT & PORT_2 > 0)
  23.     readSize += (PORT & PORT_3 > 0)

  24.     CMD = bytes([OP | PORT])
  25.     if (OP & PORT_0_WRITE):
  26.         CMD += data[0].to_bytes(1,byteorder="big",signed=False)
  27.         readSize -=1
  28.     if (OP & PORT_1_WRITE):
  29.         CMD += data[1].to_bytes(1,byteorder="big",signed=False)
  30.         readSize -=1
  31.     if (OP & PORT_2_WRITE):
  32.         CMD += data[2].to_bytes(1,byteorder="big",signed=False)
  33.         readSize -=1
  34.     if (OP & PORT_3_WRITE):
  35.         CMD += data[3].to_bytes(1,byteorder="big",signed=False)
  36.         readSize -=1

  37.     serial_f.write(CMD)
  38.     readDatas = serial_f.read(readSize)
  39.     return list(readDatas)

  40. if __name__ == "__main__":
  41.     #打開(kāi)串口
  42.     try:
  43.         myserial = serial.Serial()
  44.         myserial.port = "COM34"
  45.         myserial.baudrate = 9600
  46.         myserial.timeout = 5
  47.         myserial.parity = serial.PARITY_EVEN
  48.         myserial.open()
  49.         # time.sleep(1)
  50.     except Exception as e:
  51.         print("ERROR: ", e)
  52.         exit()

  53.     for i in range(256):
  54.         write = [i, 255-i, 0, 0]
  55.         GPIO_CTL(myserial, PORT_0 | PORT_1, PORT_0_WRITE | PORT_1_WRITE, write)
  56.         read = GPIO_CTL(myserial, PORT_1 , PORT_READ)
  57.         print('write',write,'read',read)
復(fù)制代碼

單片機(jī)源程序如下:
  1. #include "REG52.h"
  2. #include <stdio.h>
  3. #include "SysTimer.h"
  4. #include "serial.h"
  5. #include "binary.h"
  6. #include "typedef.h"

  7. #define GPIO_P0 P0
  8. #define GPIO_P1 P1
  9. #define GPIO_P2 P2
  10. #define GPIO_P3 P3

  11. void main(void)
  12. {
  13.     uint8_t UART_data, cmd, rw, GPIO_Port,i;
  14.     //初始化滴答定時(shí)器
  15.     Timer0_Init();
  16.     //初始化串口
  17.     UART_Init();
  18.     // SCON = 0xD0; //1101,0000 9 位可變波特率,偶校驗(yàn)位, 串口1模式3
  19.     // printf("READY\n");
  20.     while (1) {
  21.         if (UART_stcRingBuf.u16UsedSize) {
  22.             RingBufRead(&UART_stcRingBuf, &cmd);
  23.             // bit 0: Port 0
  24.             // bit 1: Port 1
  25.             // bit 2: Port 2
  26.             // bit 3: Port 3
  27.             // bit 4: Port r/w
  28.             // bit 5: Port r/w
  29.             // bit 6: Port r/w
  30.             // bit 7: Port r/w
  31.             // rw = UART_data & B100;
  32.             // GPIO_Port = UART_data & B11;
  33.             //檢查協(xié)議頭
  34.                 // printf("raw:%d\trw:%d\tPort:%d\n",(int)UART_data,(int)rw,(int)GPIO_Port);
  35.             for (i=B0001;i<=B1000;i<<=1) {
  36.                 //掃描端口
  37.                 GPIO_Port = cmd & i;
  38.                 if (!GPIO_Port) continue;
  39.                 rw = (cmd & (i<<4));
  40.                 // printf("raw:%X\trw:%d\tPort:%d\n",(int)cmd,(int)rw,(int)GPIO_Port);
  41.                 if (rw>0) {
  42.                     //寫(xiě)
  43.                     while(RingBufRead(&UART_stcRingBuf, &UART_data));
  44.                     // printf("write:%X\n", (int)UART_data);
  45.                     switch(GPIO_Port) {
  46.                         case B0001: GPIO_P0 = UART_data; break;
  47.                         case B0010: GPIO_P1 = UART_data; break;
  48.                         case B0100: GPIO_P2 = UART_data; break;
  49.                         case B1000: GPIO_P3 = (UART_data & B11111100) | B11; break;
  50.                     }
  51.                 }else{
  52.                     //讀
  53.                     // printf("read\n");
  54.                     switch(GPIO_Port) {
  55.                         case B0001: putchar(GPIO_P0); break;
  56.                         case B0010: putchar(GPIO_P1); break;
  57.                         case B0100: putchar(GPIO_P2); break;
  58.                         case B1000: putchar(GPIO_P3); break;
  59.                     }
  60.                 }
  61.             }
  62.         }
  63.     }
  64. }
復(fù)制代碼


上圖文件下載:
C51_UART_EIO.zip (24.26 KB, 下載次數(shù): 19)

評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天干精品 | 精品亚洲一区二区三区 | 亚洲一区成人 | 国产成人综合久久 | 国产一区二区三区视频 | 亚洲最大av网站 | 91网站视频在线观看 | 玖玖玖在线 | 国内精品久久久久久 | jizz中国日本 | 综合网中文字幕 | 亚洲精品九九 | 天堂在线www | 亚洲综合网站 | 国产精品久久久久久久久免费丝袜 | 国产乱码精品一区二区三区av | 日韩午夜在线播放 | 欧美高清成人 | 国产精品免费看 | 日韩一区二区免费视频 | 黄色一级视频免费 | 精久久久 | www.免费看片.com | 久久网站黄 | 中文字幕一区二区三区在线乱码 | 玖草资源| 日韩黄色小视频 | 91精品久久久久久久久中文字幕 | 欧美成人视屏 | 国产成人免费视频 | 亚洲一区亚洲二区 | 亚洲精品一二三区 | 亚洲成年在线 | 国产黄视频在线播放 | 综合久久av | 国产欧美一区二区久久性色99 | 国产精品视频在 | 亚洲精品久久久久久久久久久久久 | 亚洲国产精品99久久久久久久久 | 亚洲区一 | 一二三区在线 |