|
本帖最后由 mayiant1 于 2012-11-11 20:59 编辑
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portd.2
Config Lcd = 16 * 2
'定义LED是16字符,2行
' / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
'--------------定义数据-----------------------
Dim U As Bit , V As Bit , X As Long , Y As Single , A As Bit
Dim K As Byte , I As Bit , S As String * 10 , X1 As Long
' , M As Byte
'---------------初始化------------------
X = 0 : Y = 0 : I = 0
U = 0 : V = 0
Ddrd.3 = 0 '按键初始化
Ddrd.4 = 0
Portd.3 = 1
Portd.4 = 1
Cls
Lcd "**//Wang.xm@**"
Wait 2
K = 0
'Locate 1 , 2 : Lcd "X=" ; X
'Locate 1 , 12 : Lcd "u=" ; U
'Locate 2 , 2 : Lcd "Y=" ; Y
'Locate 2 , 12 : Lcd "v=" ; V
'Waitms 20
'-------------------
Config Int1 = Low Level
On Int1 Test_1
'Tcon = 0 '定义边沿触发方式,非常关键!!!!!
Enable Interrupts
Enable Int1
'Priority Set Int1 '定义中断
'On Urxc Rec_isr '中断服务子程序的标号
'Enable Urxc '允许接收中断
'Enable Interrupts ' 开放全局中断 '定义中断
'*********标定及显示*****************
Cursor Off Noblink
S22:
Cls
If X1 < X Then Y = Y + 1
If X1 > X Then Y = Y - 1
S = Fusing(y , "####.#######")
Locate 1 , 2 : Lcd "X=" ; X
Locate 1 , 12 : Lcd "K=" ; K
Locate 2 , 2 : Lcd "Y=" ; Y ; "MM"
Locate 2 , 12 : Lcd "u=" ; U
I = 1
'显示完成恢复标志
X1 = X
'显示完成恢复标志
'------------主程序-----------
Do
' K = X \ 2500
Y = Y
If I = 0 Then Goto S22
'根据标志判断更新显示
'Waitms 20
Print X ; "*" ; K ; "*" ; Y
Waitms 20
Loop
'*******************
Return
Test_1: '编码器中断服务子程序入口
I = 0
Waitms 1 '设置标志 也有稳定信号的作用
If U = 1 And Pind.4 = 1 Then X = X + 1
'荼嗦肫魇涑龅?个正交信号来判断,方向和加减计数。正交信号从P1.2 脚、 P1.3脚输入。 01 或者10数据有效,01是一个方向 10是反方向
If U = 0 And Pind.4 = 0 Then X = X - 1
K = Pind.3
U = Pind.4
Return
'Rec_isr: '中断服务子程序入口
'X = Udr '读取串口接收到的数据
'Enable Udre
'I = 0
'Return '中断返回
用的M8测试,EC11编码器,测试Y在转快时,有时不变化。请教各位帮忙看看 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|