原创 【博客大赛】利用VB写并口控制

2012-11-13 11:06 3465 4 5 分类: MCU/ 嵌入式
未命名.jpg

        最近在嵌入式一个小项目中需要加上上位机控制I2C,阅读了大量资料,下面简单介绍下工作内容与知识要点。

并行口与串行口的区别是交换信息的方式不同,并行口能同时通过8条数据线传输信息,一次传输一个字节;而串行口只能用1条线传输一位数据,每次传输一个字节的一位。并行口由于同时传输更多的信息,速度明显高于串行口,但串行口可以用于比并行口更远距离的数据传输。
                                             25并行口:

25针并行口插口的针脚功能:
CSDN_Dev_Image_2003-11-62108230.gif

  针脚 功能                                 针脚 功能

  1 选通 (STROBE低电平)      10 确认 (ACKNLG低电平)

  2 数据位0 (DATAO)             11 忙 (BUSY)

  3 数据位1 (DATA1)              12 却纸 (PE)

  4 数据位2 (DATA2)              13 选择 (SLCT)

  5 数据位3 (DATA3)              14 自动换行 (AUTOFEED低电平)

  6 数据位4 (DATA4)              15 错误观点(ERROR低电平)

  7 数据位5 (DATA5)              16 初始化成(INIT低电平)

  8 数据位6 (DATA6)              17 选择输入 (SLCTIN低电平)

  9 数据位7 (DATA7)              18-25 地线路(GND)
 

D0-D7为数据线, S0-S7为状态线, 但是S0,S1,S2是看不见的(从图中你也可以看出), 状态线是用来读取数据的, 但S0却不同, 它是超时标志位, 其他的状态线从第10-11-12-13-15针是用来发送数据的(可以看出是5位). 那么我们怎么能得到这些数据端口呢? 很简单: 每一个并口都有一个地址. 在Windows2000中, 你可以在打印机端口(LPT1)的属性中看到他们. 比如:我的是0378-037F, 如果是10进制, 那么就是888. 同样你也可以看到你的COM端口的地址. 让我以打印机为例解释一下这些针位的意义:

 

l         S0: 在EPP(增强的串口)模式下, 如果超时的话, 这位置1.

l         S1: 没用(估计是装饰).

l         S2: 大多数情况下没有使用.

l         S3: 如果打印机发生了错误则置0. 它通常被叫做nError或者nFault.

l         S4: 如果数据达到, 则置1.我们通常叫做Select.

l         S5: 如果没有打印纸了则置1.通常叫做PaperEnd或者PaperEmpty或者PError.

l         S6: 如果打印机得到了一个字节的数据则此位置0, 通常叫做nAck或者nAcknowledge.

l         S7: 如果打印机处于繁忙的状态则此位置0, 通常叫做Busy.

 

控制线:

这些线通常用来输出,但有时也可以用于输入. 他们占用C0-C7(如图), 但是在接口上C4, C5, C6, C7是不可见, 他们占用的端口地址是0x37A.

l         C0: 这一针脚是保留的. 他发送命令去读取端口上的数据(D0-D7). 当计算机启动的时候,这一位被置1,通常叫做nStrobe.

l         C1: 保留.通过他发送命令给打印机, 可以得到下一条打印线.(LF)

l         C2: 重置打印机并且清空数据缓冲区.(nInitialize)

l         C3: 保留.置高电平打开数据输入.启动计算机时置0.(nSelectIn)

 

线:

从G0-G7的针是接地用的, 他们一般是用来完善电路的.

综上所述,在我的应用程序里使用数据线而不是具有保留位的控制线或者状态线作为数据传输。原因显而易见:我们可以发送任何数据到数据线上,比如00000000,这样8根针就没有任何电压(0伏特);当然也可以发送11111111(255),这样每根针都有+5伏特的电压。但是如果我们使用控制线,他有C0,C1和C3是保留,当我们发送0000000的时候,他却只能是0100,所以这样数据就不正确了。

 

信号

数据位

针脚

方向

-Strobe

?C0

1

Output

+Data Bit 0

D0

2

Output

+Data Bit 1

D1

3

Output

+Data Bit 2

D2

4

Output

+Data Bit 3

D3

5

Output

+Data Bit 4

D4

6

Output

+Data Bit 5

D5

7

Output

+Data Bit 6

D6

8

Output

+Data Bit 7

D7

9

Output

-Acknowledge

S6

10

Input

+Busy

?S7

11

Input

+Paper End

S5

12

Input

+Select In

S4

13

Input

-Auto Feed

?C1

14

Output

-Error

S3

15

Input

-Initialize

C2

16

Output

-Select

?C3

17

Output

Ground

-

18-25

Ground

 

AT24C02是Atmel公司生产的低功耗CMOS型EEPROM,内含2K bit,即256字节存储空间。它采用I2C总线方式进行数据读写,可工作于标准模式、快速模式和高速模式。硬件电路及其简单,数据读写也很方便。

(1)引脚定义

1、2、3引脚为地址输入脚,根据需要分别接地或电源。当I2C总线工作于多节点模式时确定器件地址。AT24C02的地址分为固定部分和可编址部分,高半字节固定为1010,低半字节前三位对应A2、A1、A0引脚,最低位为读/写选择位。“0”表示写操作,“1”表示读操作。在主机发送起始条件后需发送器件地址,以确定要进行操作的器件,被选中的器件发送应答信号。4、8引脚分别接地与电源。6、7号引脚为I2C总线的时钟线与数据线,需加10K上拉电阻以使I2C总线在空闲时保持高电平。7号引脚为写保护引脚,接地时可正常读写,接高时只允许对器件进行读操作,以防止因为误操作而损坏内部存储的数据。AT24C02的写周期约为10ms,也就是在写操作后10ms才能正常读出数据。

2AT24C02写操作

单字节写操作

写操作要求在发送器件地址及应答后,发送一字节子地址,即存储器内部地址,因AT24C02容量为256字节,所以子地址为0-255。在接收到子地址后EEPROM再发送一位应答。在接下来的时钟周期里主机发送8位数据,EEPROM应答后,主机发送停止信号。

页写操作

AT24C02提供32个8字节的页空间。页写操作初始化与字节写相同,但在EEPROM接受到8位数据后单片机并不发送停止条件,而是继续发送7字节数据,在每接受一字节数据,EEPROM发送一位应答。在发送完8字节数据后,单片机需发送停止信号以终止操作。在进行页写操作时,存储器的子地址低三位会自动增一,但由于高位并不自增,在子地址加到页空间边界,即写入8字节后,下一字节会自动写入该页空间的第一字节,覆盖之前的数据,即“roll over”。

3AT24C02读操作

单字节读操作

读操作分为当前地址读操作、随机读操作、顺序读操作。这里以随机读操作为例。在单片机发送完器件地址及子地址后,产生另一个重复起始信号,并发送器件地址(此时的器件地址最低位为1,表示读操作),这时子地址指向的为之前定义的值,方便访问任意地址空间,单片机接收到数据后发送非应答信号,并产生停止条件。

软件界面

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1826731 2015-1-20 16:07

多谢提供连接,很有用,一不小心赞点成踩了

用户1576387 2014-8-9 12:35

http://bbs.cndzz.com/forum.php?mod=viewthread&tid=1493 楼主在上面的网址中写得比较详细,各位同仁可以去看看呀

用户1576387 2014-8-9 12:31

同上,楼主能不能讲讲如何在MATLAB的模型文件中编写DSP的程序呢,感谢

用户1096416 2014-4-22 23:27

谢谢分享 要是在详细一点就更好了!

用户377235 2014-4-18 20:47

.....

用户1688005 2014-4-15 20:22

好评~

用户191857 2012-12-28 19:55

谢谢分享 要是在详细一点就更好了 呵呵

wxg1988 2012-11-15 09:16

有代码可以分享下吗
相关推荐阅读
用户412802 2013-10-11 21:26
【博客大赛】AD9834,高性能信号发生器的选择
  AD9834简介 AD9834是一款75 MHz、低功耗DDS器件,能够产生高性能正弦波和三角波输出。其片内还集成一个比较器,支持产生方波以用于时钟发生。当供电电压为3 V时,其功耗仅...
用户412802 2013-04-22 16:47
想学就学,EDN助你一臂之力!拿板子参加嵌入式主题大赛
  就这几个月入门进阶FPGA,边参加嵌入式主题大赛,边学习FPGA!加入FPGA入门小组一起学!       新手快来,原理有文档文档介绍,网友在完成此次的基础上,可尽情发挥,重在学习领...
用户412802 2013-02-19 10:55
ouryk回来,活动继续
最近一直忙着其他事情,小组等活动暂停了,不过现在回来了,继续完成承诺,给以最大优惠奉献大家,欢迎关注我的小组 我爱单片机...
用户412802 2013-01-12 17:09
2013的我们
2013的我们该怎么生活,技术路线,职业生涯,希望大家一起好好讨论下...
用户412802 2012-12-11 13:11
【告别2012】我们一起破2012还继续,奋斗着,学习着
2012即将结束,拿出手上的资源,让利给大家 单片机200 包邮价格 带液晶屏 http://item.taobao.com/item.htm?spm=a1z10.3.0.76.3bpjHq&...
用户412802 2012-11-30 08:53
【博客大赛】DIY个性时钟与温度计
   学了51,你可以自己diy个性时钟与温度计,让你的东西与众不同,让同学们羡慕去吧 [注:AT89S52使用12M晶振]======================================...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条