EM chỉ biết viết ASM thui . Giờ ko biết viết C như thế nào . Bác nào bớt chút thời gian hướng dẫn em các lệnh tương ứng giữa ASM và C với . Thankss các bác nhìu nhìu
Thông báo
Collapse
No announcement yet.
Bác nào giúp em cách chuyển các lệnh từ ASM sang Keil C với
Collapse
X
-
chắc bro phải đọc wa trình dịch Keil thì mới viết đc = Keil C . Tuy cũng là dạng ngôn ngữ C nhưng mỗi trình dịch lại có mỗi cách viết khác nhau !
Bro post thử code ASM lên để a e chuyển giúp cho ! Nhớ chú thích cho dễ hiểu ! vì đặc trưng của ASM phải có sơ đồ thuật toán , thì đọc mới hiểu đc !
-
Các bác giúp chuyển từ ASM sang Keil C!!!
1. Chuong trinh ngat TOISR
TOISR:
CLR TR0 ; dung bo dem
DJNZ R1,SS; R1=0? Neu chua, nhay toi SS
JB 04H,TA; Kiem tra dieu kien tra lenh=1 nhay toi TA
JNB 07H,TO4; Kiem tra dieu khien TEST, 07H=0 ?
TEST:
MOV R1,#20; nap lai gia tri cho thanh ghi R1
INC R0; tang gia tri thanh ghi R1
CJNE R0,#12,TO3; kiem tra R0=12?
MOV R0,#0; Neu R0=12, nap lai R0=0
TO3:
JC TO4; Neu R0>12
MOV R0,#0; Nap lai R0=0
TO4:
ACALL HTHI; Goi chuong trinh hien thi
JB 07H,TO5; Kiem tra lai dieu kien TEST
MOV R1,#50;
CJNE R0,#12,NHA; R0=12? Neu khac se nhay toi NHA
SJMP SS; Neu R0=12 thuc hien thu tuc ket thuc CTN
NHA:
JC HA; Neu R0>12 thuc hien thu tuc ket thuc CTN
SJMP SS;
HA:
DJNZ R2,TTA; R2=12? Neu khac 0 se nhay toi TTA
CLR P1.4; Tat chuong
MOV R2,#3; Nap lai R2=3
TTA:
SETB 04H; dao bit dieu khien tra lenh
SJMP SS ; Nhay ve doan ket thuc CTN
TA:
MOV P0,#00; Tat tat ca cac den
MOV P1,#00;
MOV R1,#50; Nap lai gia tri R1
CLR 04H; Dao bit dieu khien tra lenh
TO5:
SETB P1.4; Rung chuong
SS:
JNB 05H,ACT41; Kiem tra su co
SETB P1.5; Neu co bat den su co, nap lai bo dem va thaot
ACT41:
CLR P1.5; Tat den su co
MM:
MOV TL0,#0EFH; Nap lai gia tri bo dem
MOV TH0,#0D*H;
SETB TR0; Khoi dong lai bo dem
RETI
2. Chuong trinh chi bao dau ra
HTHI:
MOV 02FH,A
MOV A,R0;
MOV DPTR,#300H; Nap dia chi bang dau ra cho tin hieu DPTR
MOVC A,@A+DPTR; Doc gia tri tu bang ra thanh ghi A
CJNE R0,#12,F: Nap R0=12?
SJMP ACT1; Nap neu R0=12 nhay toi ACT1
F:
JC F3; R0>12 hoac R0<12?
CJNE R0,#19,F1; Neu R0>12 kiem tra R0=19?
SJMP ACT1; Neu R0=19
F1:
JC F2; Neu R0>19 hoac R0<19?
SJMP ACT2; Neu R0>19
F2:
SJMP ACT1; Neu R0<19
F3:
CJNE R0,#7,F4; Neu R0<12 kiem tra R0=7?
SJMP ACT1; Neu R0=7
F4:
JC ACT2; Nap R0<7
SJMP ACT1; Neu R0>7
ACT1:
MOV P0,A
MOV P1,#0; Xoa P1
MOV A,02FH; Lay lai gia tri thanh ghi A
RET
ACT2:
MOV P1,A
MOV P0,#0
MOV A,02FH
RET
3. Chuong trinh su co
EMER:
JB P3.3,EXIT2; Thoat ra neu P3.3=1
CLR IE.7; Cam ngat toan cuc
STAND1:
ACALL DELAY; Doi den khi nut an duoc nha
JNB P3.3,STAND1; Lap lai neu P3.3=0
JB 03H,TO11; 03F=1 nhay to TO11
SETB 05H; Dat dieu kien su co
CLR 03H; Dat off chp nut an
SETB IE.7; Cho phep ngat toan cuc
RET
TO11:
CLR 05H; huy dieu kien su co
SETB 03H ; Dat ON cho nut an
SETB IE.7 ; Cho phep ngat toan cuc
EXIT2:
RET
4. Chuong trinh TEST
TEST:
JB P3.2,EXIT1; Thoat ra neu P3.3=1
CLR IE.7; Cam ngat toan cuc
STAND:
ACALL DELAY; doi den khi nut an duoc nha
JNB P3.2,STAND; Lap lai neu P3.2=0
JNB 06H,TO1; 06F=0 nhay toi TO1
MOV A,R0; Luu Ro vao thanh ghi A
MOV 02EH,A; Cat gia tri R0 vao ngan xep
MOV R1,#20; Nap gia tri cho R1
SETB 07H; Dat dieu kien cho TEST
CLR 06H; Dat Off cho nut an
SETB IE.7; Cho phep ngat toan cuc
RET
TO1:
MOV A,02EH
MOV R0,A
MOV R1,#50
CLR 07H; huy dieu kien su co
SETB 06H; Dat On cho nut an
SETB IE.7; Cho phep ngat toan cuc
EXIT1:
RET
Comment
-
Hic ! viết ASM có cực là vậy đó ! bạn chú thích giống như ng ta đọc từng câu lệnh vậy ! ko ai chú thích kiểu ấy hết ! Muốn đọc & hiểu code của ASM , chỉ cần chú thích ngay dòng lệnh đầu tiên mình sẽ làm gì .
Bạn chụp sơ đồ thuật toàn lên mình viết nhanh cho rùi ! Ngồi đọc chắc chết mất . Bạn định làm gì thì vẽ sơ đồ y vậy ! Mai mình thi RDM rùi ! giờ ngồi viết code chắc mai " out" luôn ! thông cảm nha !Code:#include<AT89C51.h> // nhập file này vào vì nó đn sẵn các thanh ghi & port trong MCU int8 R1 = giá trị ; // khai báo biến R1 & giá trị kèm theo nếu muốn , mình chọn tên biến giống tên thanh ghi cho bạn dễ theo dõi void T0ISR() using 1 // đoạn ct ngắt timer 0 { TR0 = 0 ; while(R1>0) { R1-- ; if( bít 05H ==0) {P1_5 = 1 ;}; };
Comment
-
đóng gói
nếu code asm dã được kiểm tra và hoạt động tốt thì bạn nên đóng gói phần code assembly này, sử dụng từ khóa #pragma asm và #pragma endasm. code viết bằng assembly sau khi đóng gói sẽ nhúng vào project của bạn bằng lệnh gọi chương trình con(hay là gọi ngắt). những khai báo về thanh ghi trong asm, sử dụng từ khóa DB, sẽ được khai báo bién trong C với từ khóa volatile. làm như vậy sẽ nhanh hơn là dịch từng dòng lệnh từ asm sang C. chúc thành công nhé.
Comment
Bài viết mới nhất
Collapse
-
bởi mèomướpDạ chú rủ cô ấy đi ăn uống, cà phê, xem phim...nhớ nắm tay, rồi thì ôm hôn,...trong vòng 1 tuần mà ko nắm tay được, 1 tháng mà ko ôm đc thì dẹp ngay và luôn ạ. Nhắn tin, gọi điện ít thôi ạ, trả lời quá lâu hoặc ko trả lời cũng dẹp ngay ạ. Nên thể hiện chú là người có điều kiện nữa ạ...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 18:50 -
-
bởi songchodep76Cảm ơn bác đã nhiệt thành chia sẻ kinh nghiệm bản thân mình cho mọi người.
Tuy nhiên, theo tiếp xúc hạn hẹp của em với mosfet thì vấn đề bác đo vôn ở cực D và thấy đỉnh nó 70V/55V Vds max, như thí nghiệm và trong hình của bác...-
Channel: Hướng dẫn sử dụng diễn đàn
07-02-2026, 09:46 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Cho tới thời điểm này, quả thật Đình Thường đây quá thất vọng, không hào hứng với Suno-AI lắm bởi ra lệnh Creat mấy chục lần với các thay đổi thì mới chọn được 2 bản hát đúng giai điệu tầm 80% để cắt ghép tạo thành bài hát...
-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 17:01 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Kính chào cả nhà, nhân dịp Tết đang về, sắp 23 tháng chạp rồi, xin gởi lời chúc xuân qua bài hát sau ạ:
Bao nhiêu hân hoan
Chúc Mừng Năm Mới, xuân sang!
Nơi nơi hát vang
nâng chén vui chúc câu An Lành.
Vạn Sự đều Hanh Thông,
Rạng...-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 16:46 -
-
bởi ittcChán quá các bác, em nhạt nhẽo quá nên tán em nào cũng tạch, tuyệt vọng vô cùng, nay lại được mấy anh đồng nghiệp cty đối tác mách cho em gái kia sinh năm 2K đầu, em chả biết nhóm đối tượng này phải tán ra sao bây giờ ?
Tính ra em...-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 00:18 -
-
bởi bqvietCó thể, ví dụ phần phản hồi gồm vi mạch cách ly quang, zener thứ cấp, transistor và điện trở phản hồi dòng ... Bất kỳ linh kiện nào nhóm đó hỏng dẫn tới mất đường phản hồi. TNY chính hãng phát hiện được chuyện đó nhưng linh kiện...
-
Channel: Điện tử công suất
05-02-2026, 18:36 -
-
bởi Nexus 6Pcho e hỏi, khi mạch có linh kiện nào đó hư thì có làm hỏng led đắt tiền (osram) không?
-
Channel: Điện tử công suất
05-02-2026, 10:42 -
-
bởi chinhnguyen9· Thí nghiệm 1 (Mạch boost, Vcc=12V, kích bằng dao động PƯM, duty 10%):
* Không có snubber + không tải: Xuất hiện hiện tượng dao động tắt dần tại cực D Mosfet (ringing). Hình 1 cho thấy trong chu kỳ đầu, điện áp spike lên tới hàng trăm V, điện...-
Channel: Hướng dẫn sử dụng diễn đàn
04-02-2026, 09:16 -
-
bởi Nexus 6Pe dùng KiCad 9.0 và đã xuất được file PDF mạch in gòi bác...
-
Channel: Điện tử công suất
03-02-2026, 16:25 -
-
bởi bqvietBấm chuột vào các tệp sẽ bật ra chương trình tương ứng. Nên dùng bản KiCAD sau
https://kicad-downloads.s3.cern.ch/a...ll_version.exe-
Channel: Điện tử công suất
03-02-2026, 14:57 -

Comment