{
TH0=(65536-50000)/256; TL0=(65536-50000)%6; i++; if(i==40) { } }
i=0;
P1_1=!P1_1;
5.外部RAM以DATA1开始的数据区中有100个数据,现在要求每隔150ms向内部RAM以DATA2开始的数据区传送10个数据,通过10次传送把数据全部传送完,以定时器1作为定时,编写有关程序。单片机的时钟频率是6MHz。
#include
unsigned char xdata data1[100]; unsigned char data data2[100]; void main() { i=0; j=0; TMOD=0x10;
TH1=(65536-25000)/256; TL1=(65536-25000)%6; EA=1; ET1=1;
17
TR1=1; while(j<10); EA=0; while(1); }
void timer1_int(void) interrupt 3 {
TH1=(65536-25000)/256; TL1=(65536-25000)%6; i++;
if(i==3) //150ms时间到,传送一个数据 { } j++; }
i=0;
for(k=0;k++;k<10)
data2[j*10+k]=data1[j*10+k];
6.用单片机和内部定时器来产生矩形波,要求频率为100Hz,占空比为2:1,设单片机的时钟频率为12MHz,写出有关程序。
#include
void main() {
18
}
i=0; TMOD=0x10;
TH0=(65536-10000)/256; TL0=(65536-10000)%6; EA=1; ET1=1; TR1=1; while(1);
void timer1_int(void) interrupt 3 {
TH0=(65536-10000)/256; TL0=(65536-10000)%6; i++;
if(i==2) P1_1=0; else if(i==3)
{ i=0; P1_1=1; } }
19
第4章 单片机外部资源的C51编程
1.某单片机系统应用8255开展I/O口,设其A口为方式1输入,B口为方式1输出,C口余下的引脚用于输出,试写出其初始化程序。
#include
#define COM8255 XBYTE[0xe003] /*定义8255控制寄存器地址*/ void init8255(void) {
COM8255=0xb4; /*定义8255控制寄存器地址*/ }
2.编写出8×4矩阵键盘的C51程序。 #include
#define H_PORT XBYTE[0xport1] #define L_PORT XBYTE[0xport2] #define ulint unsigned long int #define uint unsigned int #define uchar unsigned char
ulint Exp(uint m,uint x); /*定义一个指数函数*/
void keyscan(void) {
uchar h_code,l_code,key_code; uint i,x,m;
H_PORT=0x00; /*所有行输出0*/ l_code=L_PORT;
20