数码之家

 找回密码
 立即注册
搜索
查看: 2311|回复: 21

[C51] STC11F02E单片机二次点亮+串口通讯及串口问题记录

[复制链接]
发表于 2024-1-11 22:46:11 | 显示全部楼层 |阅读模式
本帖最后由 wangxiangtan2 于 2024-1-11 22:54 编辑


拆机的STC11F02E单片机,之前点亮过(点亮拆机的STC11F02E单片机),
那个板子LED设计成了高电平点亮,不太合理,导致LED亮度很弱,
后面打板子的时候顺带重新设计了一下(PCB到底咋进行“开窗”操作呢?想要的金色漏铜狗头被嘉立创喷锡了)。
前两天折腾两个晚上,想用它串口通讯+读取温湿度数据上传到电脑,
发现编译后的程序太大,这个单片机Flash不够……尴了个尬。
板子长这样:


先噶板子,结果又是歪歪扭扭,是不是得搞个台锯了:


焊接好元器件:

掏出东汉出土的程序烧写器:通用USB转TTL串口、STC官方的一箭双雕:

搞个程序编译一下,先点个灯,这次低电平点亮,380欧的电阻,亮度闪瞎眼,哈哈哈:



加上串口,继续编译、烧写测试:
  1. void UartInit()                        //9600bps@24.000MHz
  2. {
  3. #if (PARITYBIT == NONE_PARITY)
  4.     SCON = 0x50;            //8-bit variable UART
  5. #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
  6.     SCON = 0xda;            //9-bit variable UART, parity bit initial to 1
  7. #elif (PARITYBIT == SPACE_PARITY)
  8.     SCON = 0xd2;            //9-bit variable UART, parity bit initial to 0
  9. #endif
  10.         
  11.         PCON &= 0x7F;                //波特率不倍速
  12. //        SCON = 0x50;                //8位数据,可变波特率
  13.         AUXR |= 0x40;                //定时器时钟1T模式
  14.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  15.         TMOD &= 0x0F;                //设置定时器模式
  16.         TMOD |= 0x20;                //设置定时器模式
  17.         TL1 = 0xB2;                        //设置定时初始值
  18.         TH1 = 0xB2;                        //设置定时重载值
  19.         ET1 = 0;                        //禁止定时器中断
  20.         TR1 = 1;                        //定时器1开始计时
  21.     ES = 1;                 //Enable UART interrupt
  22.     EA = 1;                 //Open master interrupt switch
  23. }

  24. u8 receivedData;
  25. bit busy = 0;
  26. /*----------------------------
  27. UART interrupt service routine
  28. ----------------------------*/
  29. void Uart_Isr() interrupt 4
  30. {        
  31.     if (RI)
  32.     {
  33.         RI = 0;             //Clear receive interrupt flag
  34.         receivedData = SBUF;          //P0 show UART data
  35. //        bit9 = RB8;         //P2.2 show parity bit
  36.     }
  37.     if (TI)
  38.     {
  39.         TI = 0;             //Clear transmit interrupt flag
  40.         busy = 0;           //Clear transmit busy flag
  41.     }
  42. }

  43. /*----------------------------
  44. Send a byte data to UART
  45. Input: dat (data to be sent)
  46. Output:None
  47. ----------------------------*/
  48. void SendData(u8 dat)
  49. {
  50.     while (busy);           //Wait for the completion of the previous data is sent
  51.     ACC = dat;              //Calculate the even parity bit P (PSW.0)
  52.     if (P)                  //Set the parity bit according to P
  53.     {
  54.         #if (PARITYBIT == ODD_PARITY)
  55.                         TB8 = 0;            //Set parity bit to 0
  56.         #elif (PARITYBIT == EVEN_PARITY)
  57.                         TB8 = 1;            //Set parity bit to 1
  58.         #endif
  59.     }
  60.     else
  61.     {
  62. #if (PARITYBIT == ODD_PARITY)
  63.         TB8 = 1;            //Set parity bit to 1
  64. #elif (PARITYBIT == EVEN_PARITY)
  65.         TB8 = 0;            //Set parity bit to 0
  66. #endif
  67.     }
  68.     busy = 1;
  69.     SBUF = ACC;             //Send data to UART buffer
  70. }

  71. /*----------------------------
  72. Send a string to UART
  73. Input: s (address of string)
  74. Output:None
  75. ----------------------------*/
  76. void SendString(char *s)
  77. {
  78.     while (*s)              //Check the end of the string
  79.     {
  80.         SendData(*s++);     //Send current char and increment string ptr
  81.     }
  82. }
复制代码
  1. #include "stdio.h"
  2. #include "intrins.h"
  3. #include "stc11f02e.h"
  4. #include "usartNew.h"

  5. void DelayN100ms(u8 n);
  6. void Delay100ms();

  7. void main()
  8. {
  9.         u8 temp = 'a';
  10.         u8* tempStr = "\r\nHello,STC";
  11.         
  12.         P4SW = 0x70;
  13.         P0M0 = 0x01;
  14.         P0M1 = 0x00;
  15.         UartInit();        
  16.         
  17.     while (1)
  18.     {               
  19.         P33 = 0;
  20.                 DelayN100ms(10);
  21.         P33 = 1;
  22.                 DelayN100ms(10);
  23.                 SendData(temp);
  24.                 SendString(tempStr);
  25.     }
  26. }

  27. void Delay100ms()                //@24.000MHz
  28. {
  29.         unsigned char data i, j, k;

  30.         _nop_();
  31.         _nop_();
  32.         i = 10;
  33.         j = 31;
  34.         k = 147;
  35.         do
  36.         {
  37.                 do
  38.                 {
  39.                         while (--k);
  40.                 } while (--j);
  41.         } while (--i);
  42. }

  43. void DelayN100ms(unsigned char n)
  44. {
  45.         unsigned char i;
  46.         for(i=0; i<n; i++)
  47.         {
  48.                 Delay100ms();
  49.         }
  50. }
复制代码



不出意外的出了意外,上位机接收到的都是乱码:


乱码应该是串口波特率不一致导致的,板子外接24MHz晶振,一番研究发现烧写程序时,
STC-ISP界面得取消“使用内部IRC……”这个选项,原来一直用的内部晶振……尴了个尬。
再烧写进去,不出意外的继续出意外,还tm是乱码:

应该是串口初始化程序不对,打开STC-ISP的串口波特率窗口,重新计算一下:

再次烧写程序,不出意外的出了意外,竟然tm正常了,哈哈哈:


继续加IIC代码,编译后Hex文件4KB多,居然还正常烧写进去了……不会报异常啊,
查了一下说是STC-ISP自动截取Hex文件后烧写进去了,结果就是程序不运行……


看选型,这货只有2KB空间:


好了,改回去吧,就IO+串口通讯吧,这个IIC得上STC8H8K64U了。
唉,真不容易啊,我是真的菜。在此做个记录,打包一下程序文件备查备用。



(奇怪,定时发布咋没了啊?????????????????????)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +10 收起 理由
IlovePLC + 10 以資鼓勵

查看全部打赏

发表于 2024-1-12 12:19:21 | 显示全部楼层
玻璃纤维的粉尘吸进肺里无法排出无法分解,锯板子的时候千万要当心不要吸入粉尘,用电动工具锯的话最好淋水防尘
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-12 13:01:40 | 显示全部楼层
猪小呆 发表于 2024-1-12 12:19
玻璃纤维的粉尘吸进肺里无法排出无法分解,锯板子的时候千万要当心不要吸入粉尘,用电动工具锯的话最好淋水 ...

我不干净了……完犊子
回复 支持 反对

使用道具 举报

发表于 2024-1-12 15:11:47 | 显示全部楼层
为了点灯就画一块板子还做了PCB回来,现在的人真奢侈啊,面包板不够用么?
回复 支持 反对

使用道具 举报

发表于 2024-1-12 15:14:43 | 显示全部楼层
拼板边和角不好处理,我现在都不拼了,每月立创2次捷配2次够用了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-12 15:33:25 | 显示全部楼层
kindzhon 发表于 2024-1-12 15:11
为了点灯就画一块板子还做了PCB回来,现在的人真奢侈啊,面包板不够用么? ...

不懂就问,啥是面包板
回复 支持 反对

使用道具 举报

发表于 2024-1-12 16:17:49 | 显示全部楼层
猪小呆 发表于 2024-1-12 12:19
玻璃纤维的粉尘吸进肺里无法排出无法分解,锯板子的时候千万要当心不要吸入粉尘,用电动工具锯的话最好淋水 ...

估计也是吸了些些  
回复 支持 反对

使用道具 举报

发表于 2024-1-12 16:29:26 | 显示全部楼层
devcang 发表于 2024-1-12 16:17
估计也是吸了些些

少量吸入问题不大,吸多了会导致尘肺病:
https://www.doc88.com/p-7768674682460.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2024-1-12 20:08:38 | 显示全部楼层
榴莲 发表于 2024-1-12 15:14
拼板边和角不好处理,我现在都不拼了,每月立创2次捷配2次够用了。

那个JIEPEI还有信誉吗?还给你两次?不用下实物单?
回复 支持 反对

使用道具 举报

发表于 2024-1-13 09:41:33 | 显示全部楼层
wangxiangtan2 发表于 2024-1-12 15:33
不懂就问,啥是面包板

这个就是,接插线就好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-13 11:05:55 | 显示全部楼层
kindzhon 发表于 2024-1-13 09:41
这个就是,接插线就好了。

tie贴片咋整,LQFP48咋整,摁上去吗
回复 支持 反对

使用道具 举报

发表于 2024-1-13 11:50:45 | 显示全部楼层
wangxiangtan2 发表于 2024-1-13 11:05
tie贴片咋整,LQFP48咋整,摁上去吗

买QFP转DIP转换板就行了,也就几毛钱一片。
回复 支持 反对

使用道具 举报

发表于 2024-1-13 23:02:04 | 显示全部楼层
好亮的红灯,编译、烧写测试.....难度系数有点高,学习无止境。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-14 08:18:46 | 显示全部楼层
mmxx2015 发表于 2024-1-13 11:50
买QFP转DIP转换板就行了,也就几毛钱一片。

那打个最小系统板引脚全部引出不是更方便吗?白嫖包邮不比几毛钱便宜?还能练练布线技术、了解封装制板知识,后续测试温湿度模块、光敏电阻模块不都很方便吗
你们的逻辑我是看不明白了
点灯是为了说明电路设计、制板焊接、程序烧写没毛病,而不是为了点灯打了块板,我觉得逻辑没问题啊
回复 支持 反对

使用道具 举报

发表于 2024-1-14 09:11:55 来自手机浏览器 | 显示全部楼层
wangxiangtan2 发表于 2024-1-14 08:18
那打个最小系统板引脚全部引出不是更方便吗?白嫖包邮不比几毛钱便宜?还能练练布线技术、了解封装制板知 ...

画板、打板需要时间;太简单的板子打了是浪费,我们公司一年打的样板堆在仓库里,大部分都当工业废料丢掉了,我个人在JLC打的板数量如果能选1片我会选1片。
回复 支持 反对

使用道具 举报

发表于 2024-1-14 10:15:41 | 显示全部楼层
现在的小实验 应该用 RMB0.99的 STC8H2K08U-45I-TSSOP20/SOP16 来做,合理,有硬件USB直接仿真、ISP下载



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-14 14:28:57 | 显示全部楼层
mmxx2015 发表于 2024-1-14 09:11
画板、打板需要时间;太简单的板子打了是浪费,我们公司一年打的样板堆在仓库里,大部分都当工业废料丢掉 ...

zhe这就对了,最大的浪费在企业,个人的那点量只能说是毛毛雨。就是因为一整张pcb只做企业业务太浪费,人家才开放给个人玩家,尽量拼板减少浪费,对个人来说5张小板是浪费,但对企业来说物料的整体利用率提升了、又培养了大量的潜在用户,肯定是利大于弊。发现人和人的认知差异是真的大
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-14 14:30:37 | 显示全部楼层
钟山风雨起苍黄 发表于 2024-1-14 10:15
现在的小实验 应该用 RMB0.99的 STC8H2K08U-45I-TSSOP20/SOP16 来做,合理,有硬件USB直接仿真、ISP下载

用红包撸不用分型号,抵扣后哪个便宜买哪个,腿越多越好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-14 14:32:11 | 显示全部楼层
钟山风雨起苍黄 发表于 2024-1-14 10:15
现在的小实验 应该用 RMB0.99的 STC8H2K08U-45I-TSSOP20/SOP16 来做,合理,有硬件USB直接仿真、ISP下载

这个mcu是拆机件,垃圾佬哪会有浪费的习惯呢
回复 支持 反对

使用道具 举报

发表于 2024-1-14 14:53:18 | 显示全部楼层
wangxiangtan2 发表于 2024-1-14 14:30
用红包撸不用分型号,抵扣后哪个便宜买哪个,腿越多越好

天猫APP首页”猫猫币“图标点进去,然后点”大额抵扣“,每天首次进会给一定的猫币,每浏览5个商品也会给一定的猫币(每天最多5次),这里获得的猫币每天当天有效,有了猫币后可以兑红包,1块的和6毛6的很好兑,2块的早上8点要抢,现在不好抢了
另一个撸天猫红包的地方是福气兑红包,天猫APP右下角“我”点进去,找到“福气红包”图标,进去做任务,每天的任务做完,每天可以得1000福气左右,1000福气可兑1元红包,1块和2块的红包是很好兑的
以上红包限天猫APP用,注意红包有效期
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-16 02:21 , Processed in 0.156001 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表