十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
声明一个函数,叫做go,无返回值
创新互联是一家专业提供石阡企业网站建设,专注与成都做网站、网站建设、H5技术、小程序制作等业务。10年已为石阡众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
一般用来进行特殊跳转用的
请谨慎使用该函数,除非开发者非常明确该函数的作用和其副作用
常见于中断处理中,跳转到内核或者特殊代码区域执行代码,由内核或者特殊区域自行恢复或者永远不再恢复到原有的代码逻辑
如果你是初学者建议学习51系列,这样的话网上的学习资源会后很多。
单片机自身完成不了什么任务需要有外电路的配合,所以你需要购买一块51单片机开发板或者你如果嫌麻烦或者经济上不允许的话也可以用软件仿真,比如proteus软件,它可以构建单片机的外围电路,让单片机完成一定的功能。
书店里有很多51单片机的书,网上也有很多电子版。建议你从51的汇编语言学起这样会对单片机内部的工作原理有一个较深入的了解。
单片机不像一些应用软件,和硬件结合十分紧密,必须要求“高效”,所以汇编语言是最好选择,其次就是C语言了。其他语言编译效率都太低,满足不了要求。
要求用什么语言?
------------------------------
网友“星心晨梦”的回答,是可以满足题目要求的。
我实验了,是成功的,没有任何错误。
楼主应该检查自己的电路、串口设置等等。
------------------------------
网友“星心晨梦”的回答,篇幅稍稍长了一些。
缩减一半就可以正常工作了,可读性更好一些。
建议看看下面的。
------------------------------
#include AT89X51.h
#include intrins.h
#define uchar unsigned char
#define uint unsigned int
//---------------------------------------------------
uchar idata trdata1[] = {
'W','E','L','C','O','M','E',' ','T','O',' ','C','H','I','N','A','!',0x0d,0x0a,0x00};
uchar idata trdata2[] = {
'M','Y',' ','N','A','M','E',' ','I','S',' ','L','I','M','I','N','G',0x0d,0x0a,0x00};
uchar idata trdata3[] = {
'Y','I','N','G','Y','O','N','G','K','E','X','U','E','X','U','E','Y','U','A','N',0x0d,0x0a,0x00};
uchar RxBuf[5], Rx_p, Rx_i, TX_p, Tx_i;
//---------------------------------------------------
void UART_Init(void) //串口初始化
{
PCON = 0x00;
SCON = 0x50; //串口工作方式为1,允许接收.
TMOD = 0x20; // T1 定时方式2
TH1 = 0xfd; //波特率 9600bps @ fosc = 11.0592MHz
TL1 = 0xfd;
TR1 = 1; //启动T1
ES = 1; //开串口中断.
EA = 1; //开总中断.
}
//---------------------------------------------------
void main()
{
UART_Init();
Rx_p = 0;
Rx_p = 2;
while(1) {
if (Rx_p != 0) {
TX_p = Rx_p;//字符串1 2 3
Tx_i = 0; //字符指针.
Rx_p = 0; //清零.
Rx_i = 0;
TI = 1; //启动发送中断.
} }
}
//---------------------------------------------------
void Uart_INT(void) interrupt 4 //串口中断函数
{
uchar Tcv = 0;
if(RI) { //接收?.
RI = 0; //标志位清零.
RxBuf[Rx_i] = SBUF;
if((RxBuf[Rx_i - 1] == 'g') (RxBuf[Rx_i] == 'o')) Rx_p = 1;
if((RxBuf[Rx_i - 2] == 'w') (RxBuf[Rx_i - 1] == 'h') (RxBuf[Rx_i] == 'o')) Rx_p = 2;
if((RxBuf[Rx_i - 3] == 'h') (RxBuf[Rx_i - 2] == 'o') (RxBuf[Rx_i - 1] == 'm') (RxBuf[Rx_i] == 'e')) Rx_p = 3;
P1 = Rx_p; //在P1显示收到的信息.
Rx_i++;
Rx_i %= 5;
}
else {
TI = 0;
if (TX_p == 1) Tcv = trdata1[Tx_i]; //取来待发字符.
if (TX_p == 2) Tcv = trdata2[Tx_i];
if (TX_p == 3) Tcv = trdata3[Tx_i];
if (Tcv != 0) {SBUF = Tcv; Tx_i++;} //不是0就发送.
}
}
//---------------------------------------------------
单片机会不会死机与编程语言没有什么关系吧。死机通常是受干扰程序跑飞了,常用防死机的方法是使用看门狗,好多单片机都内置了看门狗,只要在主程序初始化时启动它,在主循环中加上喂狗指令,一旦死机,看门狗会在一到两秒内复位单片机。