求一段STC89C52单片机c语言程序,要求能通过串口通信由电脑向单片机发送数据,当发送的数据和前一个不一
其实很简单的帮你写一个参考程序:晶振:11.0592 波特率9600
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
**/
#include "REG52.H"
/*
* 按键定义
*/
//
unsigned char TABLE[] = "hello,I'm STC89C52";
unsigned char UARTByte;
//
void UART_Send_Byte(unsigned char Byte);
//延时
void Delay_1ms(unsigned int time)
{
unsigned int a, b;
for(a=time; a>0; a--)
for(b=110; b>0; b--);
}
/*
* 主函数
*/
int main(void)
{
unsigned char i;
PCON&= 0x7F;
TCON = 0x00;
SCON = 0x50;
//
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
//
while(1)
{
for(i = 0; i < 17; i++)
{
UART_Send_Byte(TABLE[i]);
}
UART_Send_Byte('
');
Delay_1ms(1000);
}
}
// 向串口发送一个字节数据
void UART_Send_Byte(unsigned char Byte)
{
ES = 0;
TI = 0;
SBUF = Byte;
while(!TI);
TI = 0;
ES = 1;
}
你按我的程序试试,自己观察一下为什么,如果有不明白的,再问我:
void ser() interrupt 4
{
if(RI)
{
table1[aa++]=SBUF;
if(aa>=5)
{
aa=0;
tt = 0;
SBUF=' ';
}
RI=0;
}
if(TI)
{
if(tt<5)
{
SBUF=table1[tt++];
}
TI=0;
}
}
#define uchar unsigned char
#define uint unsigned int
//---------------------------------------------------
sbit led = P1^0;
sbit key = P0^0;
sbit out1= P0^1;
sbit out2= P0^2;
uint run_cnt;
uchar temp;
//---------------------------------------------------
void send_one_byte(unsigned char tad )
{
TI=0;
SBUF=tad; //发送数据 os_wait2(K_TMO,1);
while(TI==0);
TI=0;
}
//---------------------------------------------------
void init_uart(void)
{
TMOD|=0x20;
TH1=0Xfd;
TL1=0Xfd;
SCON=0X50;
TR1=1;
ES=1;
}
//---------------------------------------------------
void main(void )
{
run_cnt=0;
init_uart();
EA=1;
//------------------------------
while(1)
{
run_cnt++;
if(run_cnt>1000)
{
send_one_byte(temp++);
led = ~led; //每次发送数据都不一样
run_cnt=0;
}
key=1;
if(key==0)
{
out1=1;
out2=1;
}
else
{
out1=0;
out2=0;
}
}
}
答://关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;//所以拿出谱子, 试探编吧!sbit Beep = P1^5 ;unsigned char n=0; //n为节拍常数变量 unsigned char code music_tab[] ={ 0x18, 0x30, 0x1C , 0x10, //格式...
答:/ 程序名称:hc595.c 程序功能:595的应用文件 程序作者:吴鉴鹰 创建时间:2014-3-10 修改时间:程序版本:V0.1 / / 包含头文件 / include "inc/hc595.h"include "reg51.h"/ 定义引脚 / /* 时钟信号线引脚定义 */ sbit HC595CLK = P0^5;/* 片选信号线引脚定义 */ sbit HC595RCK =...
答:include<reg52.h> include <intrins.h> define uchar unsigned char define uint unsigned int define upzero 1 define downzero 0 uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code seg[]={0xfe,0xfd,0xfb}; //加了PNP的情况下的段选 sbit DQ=...
答:include<reg52.h> define uchar unsigned char define uint unsigned int sbit wr=P1^0;sbit cs1=P1^1;sbit cs2=P1^2;uchar q,w,a[8];uchar code zm[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,} void wx(uchar xx){ wr=0;cs2=0;P0=xx;wr=1;cs2=1;} v...
答:给你这个双向流水灯C语言程序,经过调试成功的,按程序的内容配置硬件即可。include<reg52.h> void delay(unsigned int i);char led;main(){ unsigned char i;while(1){ led=0xfe;for(i=0; i<8; i++){ P2=led;delay(500);led=led<<1;led=led|0x01;if(led==0x7f) break;} for(i...
答:首先89C52内部没有硬件PWM发生器,只能通过定时器模拟!你可以通过两个定时器,T0控制周期,T1控制占空比。例如:实现周期为1000us,占空比为20%的PWM,用P1.0实现 首先你设置T0为65536-1000 (12M晶振)T1为65536-200 首先初始化P1.0=1,两个定时器同时打开,在定时器T1中断时拉低P1.0,在定时器...
答:可以利用print函数或者sprint函数 程序如下:include "reg52.h" //此头文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16;typedef unsigned char u8;void UsartInit(){ SCON=0X50; //0101 000设置串行口控制寄存器sm0,sm1为01,即为工作方式1 TMOD=0X20; //设置计数器 PC...
答:1、程序就时间帮你敲了,大概给你讲下原理,先定义一个位数据类型bit RecFlag(注意是bit不是sbit)和一个整形unsigned int Num还有一个用来记录接收信号的unsigned char Data。2、主函数初始化定时器0,每1ms或者10ms进中断重置TH0TL0 3、当接受到信号之后给把接受到的信号赋值给Data,同时给RecFlag...
答:sbit P20=P2^0;void delay() //延时 { for循环语句程序,根据时间定 } main(){ while(1){ P20=0;delay();P20=1;delay();} } 最好是用定时器做,那样会更精确,不会影响到mcu执行其他程序。
答://delay1(uint x)void delay1(uint x){ uint i, j;for(i = x; i > 0; i--){ for (j = 19; j > 0; j--);} } uchar getkey(){ uchar PP1=0XFF;uchar key=0xFF;KEYPORT=0XF0;PP1=KEYPORT;key=(PP1&0XF0);KEYPORT=0X0F;PP1 = KEYPORT;key=(key|(PP1&0X0F));...