[color=rgb(0," (a="=0x08)" 允许左移8次。[="" align]P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00; P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void main()
{
unsigned char a;
port_mode(); // 将单片机所有端口配置为准双向弱上拉方式 P2 = 0xFF; // P2口置弱上拉高电平输出
while(1)
{
P0 = P2; // 循环检测P2口输入电平高低。
}
}
8 软件仿真
9 硬件仿真
n 在STC程序下载软件中首先选择“Keil仿真设置”页面,点击“添加型号和头文件到Keil 中”,在出现的目录选择窗口中,定位到Keil的安装目录(比如“C:Keil818”),“确 定”后出现“STC MCU型号添加成功”的提示信息,点“确定”。
n 保持IAP15W4K58S4实验电路仍然与电脑串口相连,如上图所示,先选择仿真芯片运 行时的R/C时钟频率或使用外部晶振,然后点击“将IAP15W4K58S4设置为仿真芯片”按 钮,给电路板上电,此时就将会有程序向芯片中下载,下载完成后仿真器便制作完成 了,IAP15W4K58S4设置成仿真芯片后,要想再变成一般的单片机无需任何操作,直接 将它当作单片机下载程序使用就可以了。
n 在Keil中新建项目,出现下图 对话框,选择“STC MCU Database”项,然后从列表 中选择相应的MCU型号,在此选择“STC15W4K32S4”,点击“OK”完成选择。
然后按下图设置硬件仿真
确认前面我们所创建的项目编译没有错误后,按“Ctrl+F5”或工具栏图标 开始调 试,若硬件连接无误的话,将会进入到与软件仿真类似的调试界面,只是现在可以一步一步 执行程序并控制硬件动作了)。 有时进入调试环境可能会失败,首先检查仿真串口号选择是否有误,另外可将单片机断电 后重新上电试试,若使用的USB转串口,可将USB头断开几秒再插上,如果仍然不行,请检查
程序代码是否占用了仿真调试接口(P3.0与P3.1 )。
10 延时软件使用方法
长时间延时,函数固定格式:
void delay500ms() // 大范围精确延时函数
{
unsigned char i,j,k; // i,j,k由软件计算出确定。
for(i=41;i>0;i--) // 注意后面没分号
for(j=133;j>0;j--) // 注意后面没分号
for(k=252;k>0;k--); // 注意后面有分号
}
短暂延时,函数固定格式:
void delay (unsigned char t) // 小范围精确延时函数
{
while(--t);
}
根据不同的延时时间修改函数中的变量 i,j,k 与 t 即可, i,j,k 与 t 由笔者编写的 软件直接计算得出
11 main()、void main()和int main()的区别
在C语言中main()和void main()区别:一个有返回值(没声明类型的 默认是返回值int型),一个无返回值,特别在单片机运用中由于主函数 没有其它函数调用它,所以返回的值也就没什么用。所以一般都写的 void main(),这时程序中不需要return语句,如果main()函数前没有void
(默认为int),或者写为int main()程序中就必须有return语句,比如:
int main()
{
return 0; // 表示程序正常退出
}
在单片机程序中一般写作void min()最方便,但在其它一些C编译器中,写
作void main()编译是不能通过的,需要写成int main(),int main()是C语言
的标准格式。
12 printf 格式化输出函数(单片机与计算机通信)
例1.8 计算机串口助手显示单片机内部简单信息
#include "STC15W4K.H"
#include // 为使用KEIL自带的库函数printf而加入
void printstar()
{
printf("********************************");
}
void print_message()
{
printf("hello world"); // 最简单输出 printf("How do you do!"); // 输出换行符 printf("欢迎学习STC51单片机"); // 中文输出
}
void UART_init(void)
{
// 下面代码设置定时器1
TMOD = 0x20; // 0010 0000 定时器1工作于方式2(8位自动重装方式) TH1 = 0xFD; // 波特率:9600 /11.0592MHZ
TL1 = 0xFD; // 波特率:9600 /11.0592MHZ TR1 = 1;
// 下面代码设置定串口
AUXR = 0x00; // 很关键,使用定时器1作为波特率发生器,S1ST2=0
SCON = 0x50; // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允许接受) TI=1; // 很关键,使用printf函数时必须有此命令
}
void main()
{
}
UART_init(); // 初始化串口 printstar(); // 输出************** print_message(); // 输出说明文字 printstar(); // 输出************** while(1) ; // 停在这里
我们把例1.8程序下载到单片机中,打开程序下载软件的串口助手,接收缓冲区选择文本模式,波特率
9600,打开串口,给实验板断电后上电,可以看到单片机发给计算机的信息如图1-67所示,如果显示 的个别字符出现乱码或连续接收大量数据显示不正常,可换用其它串口助手软件,比如“丁丁串口调试 助手SSCOM 3.3”即可解决。实验结果如下:
13 学习用实验板介绍
由于后续章节实验很多,制作实验电路比较耗费时间,可以购买实验板产品。
SD卡与MP3实验板