搜索
bottom↓
回复: 5

发现一个BASCOM实现TWI从机的范例跟大家一起分享

[复制链接]

出0入0汤圆

发表于 2006-8-19 19:57:27 | 显示全部楼层 |阅读模式


  1. ' TWI-slave test

  2. ' zum simulieren eines PCF8574



  3. $regfile = "m16def.dat"                                     ' the used chip

  4. $crystal = 8000000                                          ' frequency used



  5. Config Portd = Output                                       ' kopletter PortD als Ausgang



  6. Dim Twi_status As Byte

  7. Dim Twi_data As Byte



  8. Declare Sub Twi_init_slave

  9. Declare Function Twi_wait() As Byte



  10. Twi_data = 0

  11. Call Twi_init_slave                                         ' TWI aktivieren



  12. ' Hauptschleife

  13. Do

  14.     Twi_status = Twi_wait()

  15.     If Twi_status = &H80 Then

  16.         Portd = Twi_data                                    ' Daten auf PortD ausgeben

  17.     End If

  18. Loop



  19. End



  20. ' Unterprogramme



  21. ' TWI als slave aktivieren

  22. Sub Twi_init_slave

  23.     Twsr = 0                                                ' status und Prescaler auf 0

  24.     Twdr = &HFF                                             ' default

  25.     Twcr = &B00000100                                       ' erstmal nur TWI aktivieren

  26.     Twar = &B01000000                                       ' Slaveadresse setzen

  27.     Twcr = &B01000100                                       ' dann ACK einschalten

  28. End Sub



  29. ' schauen ob was gekommen ist, Status zur¨¹ckgeben, Daten in globale variable

  30. Function Twi_wait() As Byte

  31.     Local Twcr_local As Byte

  32.     Twi_wait = &HF8

  33.     ' warten bis TWINT gesetzt ist

  34.     Twcr_local = Twcr And &H80

  35.     If Twcr_local = &H80 Then

  36.         Twi_data = Twdr                                     ' Daten sichern

  37.         Twi_wait = Twsr And &HF8                            ' status zur¨¹ckgeben

  38.         Twcr = Twcr Or &B10000000                           ' TWINT l?schen, erzeugt ACK

  39.     End If



  40. End Function

复制代码

出0入0汤圆

 楼主| 发表于 2006-8-19 19:59:27 | 显示全部楼层
主机程序



                        ' TWI Testprogramm aus der Hilfe (abgespeckt)

' mit PCF8574



'The chip will work in TWI/I2C master mode

'Connected is a PCF8574 8-bits port extender



$regfile = "M8def.dat"                                      ' the used chip

$crystal = 8000000                                          ' frequency used

$baud = 9600                                                ' baud rate



$lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI

Config Scl = Portc.5                                        ' we need to provide the SCL pin name

Config Sda = Portc.4                                        ' we need to provide the SDA pin name

Print " "

Waitms 100

Print " "

Waitms 100

Print " "

Waitms 100

Print " "

Waitms 100



I2cinit                                                     ' we need to set the pins in the proper state



Config Twi = 400000                                         ' wanted clock frequency



Dim B As Byte

Print "TWI master"

Do

  'Input B

  Incr B

  I2csend &B01000000 , B                                    ' send the value

  Print B ;

  Print " Error : " ;

  Print Err                                                 ' show error status

Loop

End

出0入0汤圆

发表于 2006-8-19 22:42:43 | 显示全部楼层
加条裤子,以免裸奔。。。

出0入0汤圆

 楼主| 发表于 2006-8-20 07:33:42 | 显示全部楼层
功能完全相同,不过是中断方式工作的



$regfile = "M16def.dat"                                     ' the chip we use

$crystal = 8000000                                          ' crystal oscillator value

$baud = 9600                                                ' baud rate

Print "MCS Electronics M8 TWI-slave demo"

Print "Use with M8-TWI master demo"

Twar = &B01000000

Twcr = &B01000101

Twbr = 32

Twsr = 0

On Twi Abc

Config Porta = Output

Dim A As Byte

Enable Twi

Enable Interrupts

Do

NOP

Porta = A

Waitms 100

Print "A:" ; A

Loop

Abc:

   'Print "TWI INT:   " ; Hex(twsr) ; Spc(3) ; Bin(twsr)

   Select Case Twsr

      Case &H60 :

      Case &H80

         A = Twdr

      Case &HA0

      Case 0

         Twcr.twsto = 1

      Case &HA8

   End Select

   Twcr.twint = 1

   Twcr.twea = 1

Return

出0入0汤圆

发表于 2006-11-7 20:10:49 | 显示全部楼层
兄弟 有没有用IAR写的啊  ATMEga16做从机的?

出0入0汤圆

发表于 2008-5-30 18:14:18 | 显示全部楼层
mark,今天顶了好多老帖子
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 01:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表