发布网友 发布时间:2024-10-22 06:30
共1个回答
热心网友 时间:2024-11-09 03:07
给你个C51的作参考,自己去移植一下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit CLK = P2^4;
sbit ST = P2^5;
sbit EOC = P2^6;
sbit OE = P2^7;
sbit PWM = P3^0;
void DelayMS(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<120;i++);
}
void main()
{
uchar Val; //读取ADC数据变量
TMOD = 0x02; //T0方式2(8位自动重装)
TH0 = 0x14; //定时236us初值0x14
TL0 = 0x00; //第一次不装(计时到256us中断时自动装入)
IE = 0x82; //开总中断,开T0中断
TR0 = 1; //启动T0
while(1) //循环
{
ST = 0; //形成启动脉冲
ST = 1;
ST = 0;
while(!EOC); //当转换时
OE = 1; //允许输出
Val = P1; //读取端口
OE = 0; //停止输出
if(Val == 0) //当读取数值最小时
{
PWM = 0; //脉宽输出为低电平
DelayMS(0xff); //延时256ms
continue; //继续
}
if(Val == 0xff) //当读取数值最大时
{
PWM = 1; //脉宽输出为高电平
DelayMS(0xff); //延时256ms
continue; //继续
}
PWM = 1; //脉宽输出为高电平时
DelayMS(Val); //依据数值作长延时
PWM = 0; //脉宽输出为低电平时
DelayMS(0xff - Val); //依据数值作短延时
}
}
void Timer0_INT() interrupt 1 //T0中断服务子程序
{
CLK = !CLK; //时钟信号取反
}
追问你好,你还有这张图的说明啥的吗?我是搞机械的,数电这块我不行。好的话再加50分给你。追答00000000000000000000000000