• 沒有找到結果。

I/O 端口

在文檔中 目 录 第 1 章 (頁 64-67)

第 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

motor

output

1.8k

BC337 25K7

GND 图 5.7 驱动电路

在文檔中 目 录 第 1 章 (頁 64-67)