第 5 章 单片机及嵌入式系统的课程教学
5.3 I/O 端口
5.3 I/O 端口
68HC11 单片机的并行 I/O 口,一般既可用做输入也可以作为输出。它具有一个输出数 据锁存口和一个数据方向寄存器。以 I/O 扩展卡为例,说明单片机的 I/O 控制。
图5.5 I/O 扩展卡
用 AS I/O 卡可以扩展 8 个数字输入口和 8 个数字输出口。8 个输入可接如传感器信号、
键盘信号,8 个输出可接电机、继电器等。
ASIO 卡采用地址锁存芯片 74HC373,用 ASBUSB 上的 OS0~OS3 和 IS0~IS3 进行地址选 择。数据通过 ASBUSA 上的总线 PC0~PC7 送到 74HC373 锁存,再作用于外部设备。数字输 出口的状态可由发光二极管 LED1 ~ LED8 的状态显示,LED9 ~LED16 显示输入状态。
例如:发光二极管 LED10 亮,则说明相应的数字输入口电平变低,所接的传感器导通。
电参数:工作电压 4.5~5V,工作电流 30mA,(负载加起来不能超过 100mA)。 高、低 电平的临界值为 4.5V。使用如下:
1. 将扩展板 ASIO 卡接插到“能力风暴”主板上,要注意将 ASIO 卡上的 ASBUSA、ASBUSB
和“能力风暴”主板的 ASBUSA、ASBUSB 相对应。 (如图 5.6 所示)。
图 5.6 AS I/O 卡与主板的连接示意图
2. 进行地址选择,ASIO 卡上双排插针 J2 对应输入的地址,J4 则为输出的地址,通过短接 头来进行选择(如表 5.1 所示)。输入、输出选择的地址可以相同,但是输入、输出实际 的存储空间却是不一样的,因为它们使用的是不同的寄存器。
表 5.1 短接头连接位置与地址选择对应表
跳线 地址
0X4000
0X5000
0X6000
0X7000
3. 8 个数字输出口
ASIO 卡上双排插针 J1 为 8 个数字输出口,各口与八位二进制数位位对应。其中外侧插 针为接地线,内侧插针为信号线,每个输出口可单独进行输出,也可以多个同时输出,由对 应的发光二极管发光提示。
4. 8 个数字输入口
ASIO 卡上双排插针 J3 为 8 个输入口,各口与八位二进制数位位对应。其中外侧插针为 接地线,内侧插针为信号线,同时在接地线的左边预留了一排+5V 电源口,备客户自行使用。
每个输入口可单独进行输入也可多个输入口同时进行输入,对应的发光二极管发光提示。
5. 在 ASBUSA、ASBUSB 旁分别边预留有相同的一排插孔,用户可自行焊上排针座,这样其 他的扩展板就可以叠加在这上面了。最多时可以叠加四块扩展板,这样你就可以扩展 32 个数字输入口和 32 个数字输出口。
6. JC 操作系统中有直接检查和修改存储器内容的基本函数。
1) 若进行输出操作,则可在交互式 JC 窗口中输入:
poke(loc, byte);
loc 为你选择的 output 地址,byte 的低 8 位对应 8 位输出,同时也与八个光电 二极管一一对应。
例如: 使用 8 个数字输出口的其中第二、三两位,选定的地址为 0x4000,则可以 在交互式窗口中键入:
poke(0x4000,0b110);
发光二极管 LED2、LED3 会发光提示,此时是当数字输出口为 1 时后方对应的二 极管亮。
2) 若进行输入操作,则可在交互式 JC 窗口中输入:
peek(loc)
其中 peek 指令只含一个参数,即选择好的输入地址,将地址 loc 上的一字节
的值返回。
例如:你需要使用 8 个数字输入口的其中第一、二两位,可将你使用的元器 件插在 J3 上的第一、二两位上,选定的地址为 0x4000,则可以在交 互式窗口中键入:
peek(0x4000)
这时它返回值为 252,也就是 0b11111100,同时发光二极管 LED9、LED10 会 发光提示,此时当数字输入口为 0 时后方对应的发光二极管亮。
7. 调试程序:
void main()
{ start_process(p1());
start_process(p2());
} void p1()
{ while(1)
{ pokeword(0x4000,0b11111111);
wait(0.5);
pokeword(0x4000,0b0);
wait(0.5);
pokeword(0x4000,0b1);
wait(0.5);
pokeword(0x4000,0b10);
wait(0.5);
pokeword(0x4000,0b100);
wait(0.5);
pokeword(0x4000,0b1000);
wait(0.5);
pokeword(0x4000,0b10000);
wait(0.5);
pokeword(0x4000,0b100000);
wait(0.5);
pokeword(0x4000,0b1000000);
wait(0.5);
pokeword(0x4000,0b10000000);
wait(0.5);
pokeword(0x4000,0b00000000);
wait(0.5);
printf("%b\n",a);
wait(0.5);
if (a!=peek(0x4000)) beep();
} }
8. 用 ASI/O 卡扩展电机、继电器等执部件时,需要另外增加驱动电路,参考驱动电路如下:
v
motoroutput
1.8k
BC337 25K7
GND 图 5.7 驱动电路