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
Bác nào giúp em cách chuyển các lệnh từ ASM sang Keil C với
Collapse
X
-
Tags: None
-
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
-
Bạn ơi thuật toán đây nhé
Cố gắng giúp tớ với . ĐAng gấp lắm rùi . Mong các bác bớt chút thời gian chuyển ASM sang Keil C với .Attached Files
Comment
-
Trời , em chỉ biết viết ASM thui mà , C còn bỡ ngỡ lắm nên mới nhờ các bác giúp . Ko bác nào giúp em ah???
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
dự án của bạn Tra theo mã, xem datasheet và đặt hàng trực tuyến. MicrochipROHMEpsonTaejin
Đặt hàng & tư vấn
Hà Nội024.3640 8561
TP.HCM028.3811 9870
Quét mã hoặc bấm để chat Zalo với R&PChat Zalo
Quét mã hoặc bấm để chat Zalo với R&PChat Zalo
Bài viết mới nhất
Collapse
-
Trả lời cho Tìm bạn thân quen cũ.bởi nhathung1101Còn sống không lão??? Mất một thời gian chữa bệnh nên quên hỏi thăm.......
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 03:09 -
-
Trả lời cho Công suất truyền qua lõi máy biến ápbởi nhathung1101Thời buổi năng lượng xanh, nhất là xanh cả mặt... Thì Điện mặt giời, điện gió, sẽ lên ngôi.
Nếu không nắm bắt được cái cơ bản đó thì đi làm coder à? Mà coder giờ thất nghiệp cả lũ vì AI rồi!!!









...
-
Channel: Điện tử công suất
Hôm qua, 03:03 -
-
Trả lời cho Công suất truyền qua lõi máy biến ápbởi quangdonguehChà, lâu lắm rồi nhưng diễn đàn vẫn còn những chủ đề cốt lõi của điện tử công suất...-
Channel: Điện tử công suất
24-10-2026, 07:53 -
-
bởi bqvietNếu muốn tăng công suất cần tăng con chip và tăng biến áp lên lớn hơn. Thiết kế ban đầu dùng TNY25x và biến áp EE16 hoặc EE13. Tăng con chip lên TNY268 vẫn mạch nguyên lý đó và biến áp lên EE19 sẽ nâng công suất ra thêm nhiều. Tăng tối đa...-
Channel: Điện tử công suất
24-10-2026, 02:14 -
-
bởi Nexus 6PMạch này chỉ chạy cho LED 10W trở xuống, còn muốn chạy Led công suất cao thì sao bác thớt ơi?-
Channel: Điện tử công suất
22-10-2026, 14:33 -
-
bởi Nexus 6PMạch này chỉ chạy cho LED 10W trở xuống, còn muốn chạy Led công suất cao thì sao bác thớt ơi?-
Channel: Điện tử công suất
22-10-2026, 10:49 -
-
Trả lời cho Tìm VR 5 chânbởi dinhthuong80Cảm ơn bác bqviet . Nhưng hình như các VR 5 chân của linhkienchatluong là loại có 2 chân là công tắc đóng mở. Thấy trên Shopee có chỗ bán linh kiện đàn Organ, mà không biết đúng loại không, với lại sao ... mắc dữ dội luôn ấy!!!
...-
Channel: Hướng dẫn tìm thông tin linh kiện
19-10-2026, 11:30 -
-
Trả lời cho Tìm VR 5 chânbởi bqvietTrang sản phẩm này có loại 5 chân và 8 chân
https://linhkienchatluong.vn/chiet-a...doi_s1595.aspx
Ngoài ra một trang cùng cấp với nó có loại 6 chân nữa, chắc đủ cho người muốn tìm....-
Channel: Hướng dẫn tìm thông tin linh kiện
17-10-2026, 17:19 -
-
bởi dinhthuong80Chào cả nhà, chúc cuối tuần vui vẻ!
Hôm nay mình lên đây nhờ ai biết chỉ dùm biến trở 5 chân này tên gọi là gì, có thể mua ở đâu vậy? Xin cám ơn nhiều! ...-
Channel: Hướng dẫn tìm thông tin linh kiện
-
Comment