找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何把STC89C52的程序移植到stc8g当中,定时器的配置需要改是什么地方?

[复制链接]
ID:668455 发表于 2021-9-22 15:20 | 显示全部楼层 |阅读模式
本帖最后由 seanhhp 于 2021-9-23 10:09 编辑

#include <STC8.H>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar code sintab[160]={
0xFF,0X17,0XFF,
0X17,0XFF,0X3B,0XFE,0XF3,0XFF,0X5F,
0XFE,0XCF,0XFF,0X80,0XFE,0XAE,0XFF,
0X9F,0XFE,0X8F,0XFF,0XBB,0XFE,0X73,
0XFF,0XD3,0XFE,0X5B,0XFF,0XE6,0XFE,
0X48,0XFF,0XF4,0XFE,0X3A,0XFF,0XFC,
0XFE,0X32,0XFF,0XFF,0XFE,0X2F,0XFF,
0XFC,0XFE,0X32,0XFF,0XF4,0XFE,0X3A,
0XFF,0XE6,0XFE,0X48,0XFF,0XD3,0XFE,
0X5B,0XFF,0XBB,0XFE,0X73,0XFF,0X9F,
0XFE,0X8F,0XFF,0X80,0XFE,0XAE,0XFF,
0X5F,0XFE,0XCF,0XFF,0X3B,0XFE,0XF3,
0XFF,0X17,0XFF,0X17,0XFE,0XF3,0XFF,
0X3B,0XFE,0XCF,0XFF,0X5F,0XFE,0XAE,
0XFF,0X80,0XFE,0X8F,0XFF,0X9F,0XFE,
0X73,0XFF,0XBB,0XFE,0X5B,0XFF,0XD3,
0XFE,0X48,0XFF,0XE6,0XFE,0X3A,0XFF,
0XF4,0XFE,0X32,0XFF,0XFC,0XFE,0X2F,
0XFF,0XFF,0XFE,0X32,0XFF,0XFC,0XFE,
0X3A,0XFF,0XF4,0XFE,0X48,0XFF,0XE6,
0XFE,0X5B,0XFF,0XD3,0XFE,0X73,0XFF,
0XBB,0XFE,0X8F,0XFF,0X9F,0XFE,0XAE,
0XFF,0X80,0XFE,0XCF,0XFF,0X5F,0XFE,
0XF3,0XFF,0X3B


}  ;


main()
{
P1M0=0x00;
P1M1=0x00;
TMOD=0X11;
ET1=1;
ET0=1;
TR0=1;
TR1=0;
EA=1;
while(1);

}

Timer0() interrupt 1
{
TR0=0;
P16=1;
TR1=1;
}
Timer1() interrupt 3
{
uchar aa,bb;
P16=0;
aa=bb*4;
TR1=0;
TH0=sintab[aa];
TL0=sintab[aa+1];
TH1=sintab[aa+2];
TL1=sintab[aa+3];
bb++;
if(bb>39)bb=0;
TR0=1;
}

回复

使用道具 举报

ID:624769 发表于 2021-9-22 15:51 | 显示全部楼层
T2 要大改,设置方式什么的都不一样了, T0,T1 改动不大,不要去动AUXR,  TMOD = 0x00, 16位自动重载,中断中不用再重新赋值 TH0,TL0 会自动下一轮计数。其他没什么变化。
回复

使用道具 举报

ID:123289 发表于 2021-9-22 16:38 | 显示全部楼层
为何不查看一下两者的手册呢?这样才能学到东西,也提升解决问题的能力。
回复

使用道具 举报

ID:514901 发表于 2021-9-23 09:04 | 显示全部楼层
如果晶振频率一样的话,定时器相关的可以不需要改
回复

使用道具 举报

ID:668455 发表于 2021-9-23 10:07 | 显示全部楼层
yzwzfyz 发表于 2021-9-22 16:38
为何不查看一下两者的手册呢?这样才能学到东西,也提升解决问题的能力。

我看了啊,我就是对比之后弄不出来

回复

使用道具 举报

ID:668455 发表于 2021-9-23 10:08 | 显示全部楼层
188610329 发表于 2021-9-22 15:51
T2 要大改,设置方式什么的都不一样了, T0,T1 改动不大,不要去动AUXR,  TMOD = 0x00, 16位自动重载,中断 ...

#include <STC8.H>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar code sintab[160]={
0xFF,0X17,0XFF,
0X17,0XFF,0X3B,0XFE,0XF3,0XFF,0X5F,
0XFE,0XCF,0XFF,0X80,0XFE,0XAE,0XFF,
0X9F,0XFE,0X8F,0XFF,0XBB,0XFE,0X73,
0XFF,0XD3,0XFE,0X5B,0XFF,0XE6,0XFE,
0X48,0XFF,0XF4,0XFE,0X3A,0XFF,0XFC,
0XFE,0X32,0XFF,0XFF,0XFE,0X2F,0XFF,
0XFC,0XFE,0X32,0XFF,0XF4,0XFE,0X3A,
0XFF,0XE6,0XFE,0X48,0XFF,0XD3,0XFE,
0X5B,0XFF,0XBB,0XFE,0X73,0XFF,0X9F,
0XFE,0X8F,0XFF,0X80,0XFE,0XAE,0XFF,
0X5F,0XFE,0XCF,0XFF,0X3B,0XFE,0XF3,
0XFF,0X17,0XFF,0X17,0XFE,0XF3,0XFF,
0X3B,0XFE,0XCF,0XFF,0X5F,0XFE,0XAE,
0XFF,0X80,0XFE,0X8F,0XFF,0X9F,0XFE,
0X73,0XFF,0XBB,0XFE,0X5B,0XFF,0XD3,
0XFE,0X48,0XFF,0XE6,0XFE,0X3A,0XFF,
0XF4,0XFE,0X32,0XFF,0XFC,0XFE,0X2F,
0XFF,0XFF,0XFE,0X32,0XFF,0XFC,0XFE,
0X3A,0XFF,0XF4,0XFE,0X48,0XFF,0XE6,
0XFE,0X5B,0XFF,0XD3,0XFE,0X73,0XFF,
0XBB,0XFE,0X8F,0XFF,0X9F,0XFE,0XAE,
0XFF,0X80,0XFE,0XCF,0XFF,0X5F,0XFE,
0XF3,0XFF,0X3B


}  ;


main()
{
P1M0=0x00;
P1M1=0x00;
TMOD=0X11;
ET1=1;
ET0=1;
TR0=1;
TR1=0;
EA=1;
while(1);

}

Timer0() interrupt 1
{
TR0=0;
P16=1;
TR1=1;
}
Timer1() interrupt 3
{
uchar aa,bb;
P16=0;
aa=bb*4;
TR1=0;
TH0=sintab[aa];
TL0=sintab[aa+1];
TH1=sintab[aa+2];
TL1=sintab[aa+3];
bb++;
if(bb>39)bb=0;
TR0=1;
}

回复

使用道具 举报

ID:624769 发表于 2021-9-23 17:25 | 显示全部楼层
seanhhp 发表于 2021-9-23 10:08
#include
#include "intrins.h"
#define uchar unsigned char

稍微,花了点力气看了一下你这代码……,
你这写的啥??
不会是用定时器作 蜂鸣器 奏乐吧? 希望我猜错。

从代码上看,能正常跑, 唯一就是  P1, 你设置的准双向, P16 = 1 的时候,输出可能不够。
TMOD = 0x11;  如果你是 STC8 的话 T1,T0 不会自动重载, 全靠T1中断里面的赋值。
需要注意的是:
你T1 中断里面用了,uchar aa,bb;   这种情况一般,需要指定寄存器组,比如:
Timer1() interrupt 3 using 1
不然,每次进入中断,可能会 aa,bb 不是你以为的值。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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