}while (flagm==1);
////////////////////////////////////// return; }
int m_k0() //LED全亮并退出程序 {
int flagk;
outportb(ioadd1,0x0ff); flagk=0; return (flagk); }
void m_k1() //LED {
void delay1();
if (d1==0) { outportb(ioadd1,0x0ff); delay1();
d1=1;
} else { outportb(ioadd1,0x0); delay1();
d1=0;
} return; }
闪烁 31
void m_k2() //LED从下到上循环点亮 {
void delay1(); int temp;
temp=m_bit&0x80; m_bit=m_bit<<1; if (temp==0x80) m_bit=m_bit|1; outportb(ioadd1,m_bit); delay1(); return; }
void m_k3() //LED {
void delay1(); int temp;
temp=m_bit&0x1; m_bit=m_bit>>1; if (temp==0x1) m_bit=m_bit|0x80; outportb(ioadd1,m_bit); delay1(); return; }
void delay1() // {
从上到下循环点亮 延时 32
int i,j,a=0;
for (i=1;i<=5000;i++)
{
for (j=1;j<=10000;j++) { a=a+0; } }
return;
}
五、思考题
1、在图1中,从数据端口送出”1”使LED亮,还是使LED灭?
2、将K1L、K2L这一点亮退出功能修改为:自上而下一个一个点亮,然后自下而上一个一个熄灭,循环不断。
33
实验七 8253定时器/计数器实验
一、 实验目的和内容
1. 掌握8253定时器/计数器芯片的工作原理 2. 完成8253定时器/计数器的编程实验
二、实验电路及说明
实验电路如图8所示 地址为20H
8253的三个计数器全部开放,J53上有OUT0、GATE0、CLK0、OUT1、GATE1、CLK1、OUT2、GATE2、CLEK2。它们可与任何I/O相连。在我公司提供的实验箱上的D部分有各种频率时钟信号。下面提供一例,供参考,学生可根据要求自行调换频率。
如图8所示
三、实验器材
奔腾微机一台、SXL-100(PCI)接口实验仪一套、示波器一台 四、硬件实验步骤
本实验在板上由G与H部分组成,由短路块结合跳线方式进行实验。
1用跳线把G区J7的 31.25KHZ端与H区J53的CLK0相连 2用跳线把J区J101(GATE)和H区GATE0、GATE1端相连 3 H区OUT0端和H区CLK1端相连,保持8255的各短路块不动
五、程序框图
开始 34
提示 初始化8255 初始化8253,使用计数器0和1工作于方式3 启动计数使GATE=1 PC键按下 退出 延时 六.程序代码
#include
unsigned long int iobase0,iobase1,membase0,membase1;
unsigned long int ic82530=0x20,ic82531=0x21,ic8253type=0x23; unsigned long int ic8255a=0x0,ic8255b=0x1,ic8255type=0x3; unsigned char bh; unsigned char bl; int
buffer1[10]={0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x98}; int dis1[4]={0,0,0,0};
int findPCIcard() //找寻PCI卡的总线号及设备号及功能号 {
union REGS regs; regs.h.ah=0xb1;
regs.h.al=0x02; //寻找指定厂商和设备号的PCI卡的位置 regs.x.cx=0x8376;
regs.x.dx=0x10eb; //输入要寻找的厂商号和设备号 regs.x.si=0x00; //输入要寻找的PCI卡索引号 int86(0x1a,®s,®s); //调用指定的X86中断
35