找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2693|回复: 6
收起左侧

51单片机向STC8H移植问题

[复制链接]
ID:743542 发表于 2022-1-10 17:57 | 显示全部楼层 |阅读模式
大佬们,我最近在学习写STC8单片机的程序,但是我之前只学过89C51的,而且我不知道怎么规范化程序。官方的文档看起来也很晦涩,有没有大佬能够指导一下我的这个程序的移植问题~我是用89C51写的两个按键来控制数码管显示0-8,并且输出数字到P2口,向STC8移植并且规范化需要怎么来写呢?
  1. #include<reg51.h>
  2. #define uchar unsigned char        
  3. #define uint unsigned int
  4. sbit key=P0^0;
  5. sbit key1=P0^1;
  6. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  7. void delay_lms(uint i){
  8.         uchar t;
  9.         while(i--)
  10.                 for(t=0;t<=150;t++);
  11. }
  12. void main(){
  13.         uchar i=0;
  14.         key=1;
  15.         P1=0xc0;
  16.         while(1){
  17.                 if(key==0){
  18.                         delay_lms(20);
  19.                         if(key==0){
  20.                                 if(i<=6){i++;}
  21.                                 else{i=7;}
  22.                                 
  23.                                 P1=tab[i];
  24.                                 P2=i;
  25.                                 if(i==7)i=7;
  26.                         }
  27.                                 while(key==0);
  28.                 }
  29.                 if(key1==0){
  30.                         delay_lms(20);
  31.                         if(key1==0){
  32.                                 if(i>=1){i--;}
  33.                                 else{i=0;}
  34.                                 P1=tab[i];
  35.                                 P2=i;
  36.                                 if(i==0)i=0;
  37.                         }
  38.                                 while(key1==0);
  39.                 }
  40.         }
  41. }
复制代码


回复

使用道具 举报

ID:161164 发表于 2022-1-10 18:58 | 显示全部楼层
你的代码很简单
没有用到任何寄存器,可直接使用
但要注意:除P3.0和P3.1外,其余所有I/O口上电后的状态均为高阻输入状态,
在使用I/O口时必须先设置I/O口模式
2022-01-10_185818.png
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;

    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;

而目STC8比传统51单片机快12倍
延时函数要改一改

题外话:阻塞式延时浪费系统资源,少用为妙
回复

使用道具 举报

ID:743542 发表于 2022-1-10 19:36 | 显示全部楼层
lkc8210 发表于 2022-1-10 18:58
你的代码很简单
没有用到任何寄存器,可直接使用
但要注意:除P3.0和P3.1外,其余所有I/O口上电后的状态 ...

谢谢大佬的回复!我看了官方的例程,已经将I/O口初始化了,但是我现在的主要的问题是我现在的输出最高就是0x07,但是我不知道怎么在不改变0x0x的情况下进行写入数据,我只知道应该用或/非,但是不知道具体怎么操作,另外就是我现在写的代码很简单,但是如果我继续加功能这样写肯定是不行的,我规范化的话该怎么写呢?
回复

使用道具 举报

ID:57657 发表于 2022-1-10 21:43 | 显示全部楼层
lkc8210 发表于 2022-1-10 18:58
你的代码很简单
没有用到任何寄存器,可直接使用
但要注意:除P3.0和P3.1外,其余所有I/O口上电后的状态 ...

你应该直接用STC提供的头文件,除头文件外 不要用 sfr。
不同型号的某些寄存器sfr地址都可能不一样,否则出现问题都找不到北。
1.png
回复

使用道具 举报

ID:161164 发表于 2022-1-10 21:45 | 显示全部楼层
erevn38107 发表于 2022-1-10 19:36
谢谢大佬的回复!我看了官方的例程,已经将I/O口初始化了,但是我现在的主要的问题是我现在的输出最高就 ...

你这情况是需要学习一下单片机的C语言
回复

使用道具 举报

ID:884042 发表于 2022-1-12 19:17 | 显示全部楼层
STC8H还是基于8051内核改的,只不过是增加了can,adc,pwn,pac等模块,所以只要你的程序没用到其它的一些特殊寄存器的话直接复制程序就得了。。。。。。。
回复

使用道具 举报

ID:382454 发表于 2022-1-12 22:14 | 显示全部楼层
记住学会用模块化编程。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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