بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اخوتي الا عزاء.. لقد قمت بكتابة برنامج للتحكم في 4 stepper motor عن طريق الكمبيوتر .
لما قمت بعمل تجربة الاحظ انه لا يوجد تزامن بين الكمبيوتر و PIC16F877A .
لو تكرمتم علي وقمتم بتفسير و تصحيح المشكلة،، الله يجازيكم كل خير..
code mikroC:
كود:
char text;
short i;
void main()
{
UART1_Init(9600);
i=0;
//text=9;
TRISB=0;
TRISD=0;
PORTB=0;
PORTD=0;
while(1) {
if(UART1_Data_Ready()){
text=UART1_Read();
}
if(text==8)
{
PORTB=0;
PORTD=0;
} else {
}
if(text=='0')
{
PORTB=0B00000001;delay_ms(150);
PORTB=0B00000100;delay_ms(150);
PORTB=0B00000010;delay_ms(150);
PORTB=0B00001000;delay_ms(150);
}
if(text=='1')
{
PORTB=0B00001000;delay_ms(150);
PORTB=0B00000010;delay_ms(150);
PORTB=0B00000100;delay_ms(150);
PORTB=0B00000001;delay_ms(150);
}
if(text=='2')
{
PORTB=0B00010000;delay_ms(150);
PORTB=0B01000000;delay_ms(150);
PORTB=0B00100000;delay_ms(150);
PORTB=0B10000000;delay_ms(150);
}
if(text=='3')
{
PORTB=0B10000000;delay_ms(150);
PORTB=0B00100000;delay_ms(150);
PORTB=0B01000000;delay_ms(150);
PORTB=0B00010000;delay_ms(150);
}
if(text=='4')
{
PORTD=0B00000001;delay_ms(150);
PORTD=0B00000100;delay_ms(150);
PORTD=0B00000010;delay_ms(150);
PORTD=0B00001000;delay_ms(150);
}
if(text=='5')
{
PORTD=0B00001000;delay_ms(150);
PORTD=0B00000010;delay_ms(150);
PORTD=0B00000100;delay_ms(150);
PORTD=0B00000001;delay_ms(150);
}
if(text=='6')
{
PORTD=0B00010000;delay_ms(150);
PORTD=0B01000000;delay_ms(150);
PORTD=0B00100000;delay_ms(150);
PORTD=0B10000000;delay_ms(150);
}
if(text=='p')
{
}
}
}
code VB.NET :
كود:
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports System.IO.Ports
Public Class Form1
Public m, p As Boolean
Dim S As String
Dim x As Integer
Dim Port As SerialPort
Public Sub WritePort(ByVal Chaine As String)
Port.Write(Chaine)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CmbPort.SelectedIndex = 2
p = False
m = False
End Sub
Private Sub Connect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Connect.Click
Button1.Enabled = True
'InitializeComponent()
Port = New SerialPort(CmbPort.Text, 9600)
Port.Open()
End Sub
Private Sub BtnM1M_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM1M.MouseDown
S = 1
BtnM1M.BackColor = Color.Green
m = True
WritePort(S)
End Sub
Private Sub BtnM1M_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM1M.MouseUp
S = "8"
BtnM1M.BackColor = Color.Red
m = False
WritePort(S)
End Sub
Private Sub Tim_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tim.Tick
'If m Then
' WritePort(S)
'End If
'If p Then
' WritePort(S)
'End If
Static j As Integer = 4
WritePort(j)
j += 1
If j = 8 Then
j = 4
End If
End Sub
Private Sub BtnM1P_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM1P.MouseDown
S = 0
BtnM1P.BackColor = Color.Green
p = True
WritePort(S)
End Sub
Private Sub BtnM1P_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM1P.MouseUp
S = "8"
BtnM1P.BackColor = Color.Red
p = False
WritePort(S)
End Sub
Private Sub TimInt_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimInt.ValueChanged
'Tim.Interval = TimInt.Value
End Sub
Private Sub BtnM2P_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM2P.MouseDown
S = "2"
BtnM2P.BackColor = Color.Green
p = True
WritePort(S)
End Sub
Private Sub BtnM3P_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM3P.MouseDown
S = 4
BtnM3P.BackColor = Color.Green
p = True
WritePort(S)
End Sub
Private Sub BtnM4P_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM4P.MouseDown
S = 6
BtnM4P.BackColor = Color.Green
p = True
WritePort(S)
End Sub
Private Sub BtnM2M_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM2M.MouseDown
S = 3
BtnM2M.BackColor = Color.Green
m = True
WritePort(S)
End Sub
Private Sub BtnM2M_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM2M.MouseUp
S = "8"
BtnM2M.BackColor = Color.Red
m = False
WritePort(S)
End Sub
Private Sub BtnM3M_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM3M.MouseDown
S = 5
BtnM3M.BackColor = Color.Green
m = True
WritePort(S)
End Sub
Private Sub BtnM3M_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM3M.MouseUp
S = "8"
BtnM3M.BackColor = Color.Red
m = False
WritePort(S)
End Sub
Private Sub BtnM4M_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM4M.MouseDown
S = "p"
BtnM4M.BackColor = Color.Green
m = True
WritePort(S)
End Sub
Private Sub BtnM4M_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM4M.MouseUp
S = "8"
BtnM4M.BackColor = Color.Red
m = False
WritePort(S)
End Sub
Private Sub BtnM2P_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM2P.MouseUp
S = "8"
BtnM2P.BackColor = Color.Red
p = False
WritePort(S)
End Sub
Private Sub BtnM3P_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM3P.MouseUp
S = "8"
BtnM3P.BackColor = Color.Red
p = False
WritePort(S)
End Sub
Private Sub BtnM4P_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnM4P.MouseUp
S = "8"
BtnM4P.BackColor = Color.Red
p = False
WritePort(S)
End Sub
Private Sub BtnM1M_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnM1M.Click
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WritePort(Tx.Text)
'Tim.Start()
'
For i = 0 To 100
Threading.Thread.Sleep(200)
Application.DoEvents()
WritePort(x)
x += 1
If x = 8 Then
x = 4
End If
Next
End Sub
End Class