Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 136
Phụ lục 1: SOẠN THẢO VÀ NẠP CHƯƠNG TRÌNH
CHO AT89C51
1. Soạn thảo chương trình
Soạn thảo chương trình cho AT89C51 có thể dùng nhiều chương trình khác
nhau. Phần phụ lục này giới thiệu một chương trình cho phép soạn thảo bằng hợp ngữ:
Crimson Editor. Download chương trình tại:
hay
/>
Sau khi cài đặt, khởi động Crimson từ Start > All Programs > Crimson Editor
> Crimson Editor.
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 137
1.1. Định nghĩa cú pháp
Vào menu Document > Syntax Type > Customize
Tại cửa sổ Preference, trong phần Syntax Type chọn một mục còn trống:
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 138
Trong phần Lang Spec, nhấn vào nút Browse bên phải, chọn file spec là
C:\Program Files\Crimson Editor\spec\8051-asm.spc.
Tương tự, chọn file Keywords là 8051-asm.key và phần Description có thể gõ
tuỳ ý:
Sau đó, trong menu Document > Syntax Type, chọn vào phần 8051 (là phần
định nghĩa tại trường Description).
(được tạo ra như ở phần 1), chương trình điều khiển trên máy tính và một mạch nạp.
Phần này giới thiệu một mạch nạp sử dụng cổng COM và chương trình điều khiển
dùng Visual Basic 6.0.
2.1. Chương trình điều khiển
Giao diện chương trình:
Chương trình nguồn (có thể download tại />):
Private Buffer_wr As String
Private kk As Integer
Private Prog_Type As Byte
Private Chip_Type As Byte
Private Time_Set As Integer
Private Sub AT2051_Click()
If AT2051.Checked = False Then
AT2051.Checked = True
End If
AT55.Checked = False
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 143
AT52.Checked = False
AT51.Checked = False
AT2052.Checked = False
Frame4.Caption = "FLASH ROM AT89C2051"
Chip_Type = 4
End Sub
Private Sub AT2052_Click()
If AT2052.Checked = False Then
Frame4.Caption = "FLASH ROM AT89C52"
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 144
Chip_Type = 2
End Sub
Private Sub AT55_Click()
If AT55.Checked = False Then
AT55.Checked = True
End If
AT2051.Checked = False
AT52.Checked = False
AT51.Checked = False
AT2052.Checked = False
Frame4.Caption = "FLASH ROM AT89C55"
Chip_Type = 3
End Sub
Private Sub Bar1_MouseDown(Button As Integer, Shift As Integer, x As
Single, y As Single)
Bar1.Value = 0
End Sub
Private Sub cm1_Click()
If cm1.Checked = False Then
cm1.Checked = True
End If
Cm2.Checked = False
Cm4.Checked = False
If COMM.PortOpen = True Then
End If
cm1.Checked = False
Cm2.Checked = False
If COMM.PortOpen = True Then
COMM.PortOpen = False
End If
If Emul.SubCOM.PortOpen = True Then
Emul.SubCOM.PortOpen = False
End If
COMM.CommPort = 4
Emul.SubCOM.CommPort = 4
End Sub
Private Sub Command1_Click()
Dim nn As Integer
Dim i As Integer
Dim Et As Double
Dim temp As String
Dim CPU_TYPE As String
Command1.Enabled = False
If COMM.PortOpen = False Then
COMM.PortOpen = True
End If
' Xac dinh loai CHIP dang chon de nap
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 146
Dim Max_Buffer As Integer
Select Case Chip_Type
Case 1
**********
' Xac dinh loai hinh dieu khien
Select Case Prog_Type
Case 1
Erase_Chip_New
If Label1.Caption = "Error Timeout" Then
Command1.Enabled = True
Exit Sub
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 147
End If
If Len(Buffer_wr) = 0 Then
i = MsgBox(" BUFFER is empty!", vbOKOnly + vbApplicationModal
+ vbCritical, "Warning")
Label1.Caption = " BUFFER is empty!"
Command1.Enabled = True
Exit Sub
End If
Pro_Unlock_Bit
Case 2
Erase_Chip_New
If Label1.Caption = "Error Timeout" Then
Command1.Enabled = True
Exit Sub
End If
If Len(Buffer_wr) = 0 Then
i = MsgBox(" BUFFER is empty!", vbOKOnly + vbApplicationModal
+ vbCritical, "Warning")
Label1.Caption = " BUFFER is empty!"
Command1.Enabled = True
AppPath = GetSetting("up_kit 89c51", "editor", "App editor")
Result = Shell(AppPath, vbNormalNoFocus)
Exit Sub
Loi:
Call MsgBox("No editor program", vbCritical + vbOKOnly, "Error")
End Sub
Private Sub Command4_Click()
Dim l As Integer
If Label2.Caption = 0 Then
l = MsgBox(" BUFFER is empty!", vbOKOnly + vbApplicationModal +
vbCritical, "Warning")
Exit Sub
End If
Command4.Enabled = False
If COMM.PortOpen = False Then
COMM.PortOpen = True
End If
'************************************************************
Write_Ram
Command4.Enabled = True
End Sub
Private Sub Command5_Click()
cmdl1.Filter = "*.exe|*.exe"
cmdl1.ShowOpen
If cmdl1.filename = "" Then Exit Sub
SaveSetting "up_kit 89c51", "editor", "App editor", cmdl1.filename
End Sub
Lk.Checked = False
ulk.Checked = False
cp.Checked = False
Rd.Checked = False
Command1.Caption = "Erase"
Command1.SetFocus
Prog_Type = 5
End Sub
Private Sub File1_Click()
Dim Name_of_File As String
Dim temp As String
temp = Right(File1.Path, 1)
If temp <> "\" Then
Name_of_File = File1.Path + "\" + File1.filename
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 150
Else
Name_of_File = File1.Path + File1.filename
End If
Slfile.Caption = Name_of_File
Load_File
End Sub
Private Sub Form_Load()
Prog_Type = 1
Chip_Type = 1 '4
Dir1.Path = App.Path
End Sub
Private Sub Option2_Click()
File1.Pattern = "*.BIN"
End Sub
Private Sub Option3_Click()
File1.Pattern = "*.*"
End Sub
Private Sub Qt_Click()
Unload Me
End Sub
Private Sub Rd_Click()
If Rd.Checked = False Then
Rd.Checked = True
End If
Lk.Checked = False
ulk.Checked = False
cp.Checked = False
Ers.Checked = False
Command1.Caption = "Read"
Command1.SetFocus
Prog_Type = 4
End Sub
Private Sub Timer1_Timer()
Time_Set = Time_Set + 1
End Sub
Private Sub ulk_Click()
Sample = Right(temp, Len(temp) - 3)
val1 = Asc(Sample)
If val1 > 60 Then
val2 = val2 + (val1 - 55) * 16 * 16 * 16
Else
val2 = val2 + (val1 - 48) * 16 * 16 * 16
End If
Sample = Right(Sample, Len(Sample) - 1)
val1 = Asc(Sample)
If val1 > 60 Then
val2 = val2 + (val1 - 55) * 16 * 16
Else
val2 = val2 + (val1 - 48) * 16 * 16
End If
Sample = Right(Sample, Len(Sample) - 1)
val1 = Asc(Sample)
If val1 > 60 Then
val2 = val2 + (val1 - 55) * 16
Else
val2 = val2 + (val1 - 48) * 16
End If
Giáo trình Vi điều khiển Phụ lục 1 – Soạn thảo và nạp chương trình cho AT89C51
Phạm Hùng Kim Khánh Trang 153
Sample = Right(Sample, Len(Sample) - 1)
val1 = Asc(Sample)
If val1 > 60 Then
val2 = val2 + (val1 - 55)
Else
val2 = Asc(buffer)
buffer = Right(buffer, Len(buffer) - 1)
If val1 > 60 Then
val1 = val1 - 55