📄 main.c
字号:
#include<reg51.h>
#include<stdio.h>
#include"types.h"
uchar code *s ="Please input the following commands:\n"
"Inport p (read port)\n"
"Outport p nnn (write port)\n"
" where p=0..3, nnn=0..255\n"
"Help or ? (display this text)\n";
/************************** 输出帮助信息函数 *****************************
* 功能:从串行口输出帮助提示信息
*************************************************************************/
uchar help(){
printf( "\n%s\n", s );
return 0;
}
/*********************** 单片机I/O口输入命令函数 **************************
* 功能:输入单片机P0~P3口的状态
* 命令格式:Inport p,其中参数 p = 0~3 为端口号
*************************************************************************/
uchar inport( uchar idata *buf ) {
uint p;
uchar v;
if( sscanf( buf, "%i", &p ) != 1 )
return 1; // 命令中缺少端口参数则返回错误号1
switch( p ){
case 0: v = P0; break; // 输入P0状态
case 1: v = P1; break; // 输入P1状态
case 2: v = P2; break; // 输入P2状态
case 3: v = P3; break; // 输入P3状态
default: return 2; // 端口参数超出范围则返回错误号2
}
printf( "Port P%d = %02X\n", p, (uint)v );
return 0;
}
/*********************** 单片机I/O口输出命令函数 **************************
* 功能:从单片机P0~P3口输出给定值
* 命令格式:Outport p nnn,其中参数p = 0~3为端口号,nnn为输出给定值0~255
**************************************************************************/
uchar outport( uchar idata *buf ) {
uint p, v;
if( sscanf( buf, "%i%i", &p, &v ) != 2 )
return 1; // 命令中缺少端口参数则返回错误号1
switch( p ){
case 0: P0 = v; break; // 从P0口输出给定值
case 1: P1 = v; break; // 从P1口输出给定值
case 2: P2 = v; break; // 从P2口输出给定值
case 3: P3 = v | RXD_ | TXD_; break; // 从P3口输出给定值
default: return 2; // 端口参数超出范围则返回错误号2
}
return 0;
}
/********************************* 主函数 ********************************
* 功能:初始化单片机串行口,等待从串行口输入命令并调用命令处理函数
**************************************************************************/
void main( void ) {
uchar idata buf[21];
uchar elevel;
PCON |= SMOD_; // 初始化单片机的串行口UART
SCON = TI_ + REN_ + SM1_;
TMOD = T1_M1_;
TH1 = (uchar) -(0.5 + XTAL / 12.0 / 16 / BAUD);
TL1 = -1;
TR1 = 1;
for(;;){
help(); // 输出帮助提示信息
putchar('>');
gets( buf, 20 ); // 等待从串行口输入命令
switch( elevel = command( buf ) ){ // 根据输入值调用命令处理函数
case 0: break;
default: printf( "Error %d\n\n", (uint)elevel );
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -