Professional Documents
Culture Documents
- 1 = On , 0 = Off
- Port B: x x x x 4 3 2 1
- Example: Port B = 00000001B (means 1st LED is On)
- 7 Segment, from a – g
- 0 = On , 1 = Off
- Port A: x g f e d c b a
- x = 1 always
- Example: Port A = 10100100B
(means digit 2 is displayed)
;;*/ { (Red (bit_4) , Yellow (bit_3) , Green (bit_2) ,Red (bit_1) }
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 1000H
;SET CONTROL WORD = 10000000 = 80H (means all ports are outputs)
MOV AL,10000000B
OUT PPIC_C,AL
;CLEAR PORT A
MOV AL,11111111B
OUT PPIA,AL Don’t need to this
;CLEAR PORT C just to clear port A &C
MOV AL,00000000B
OUT PPIC,AL
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
RET ;else (CX = 0) then end the CALL and return to main program
DATA:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 00H
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
DELAY:
MOV CX,0 ;SET DELAY LENGTH
CONT:
LOOP CONT ;firstly decrement CX then compare if CX !=0 jmp to count
So the first stap CX will be (0ffff H) because firstly Decrement CX
RET ;else (CX = 0) then end the CALL and return to main program
DATA:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 00H
CODE ENDS
END
c0 c1 c2 c3 c4 c5 c6 c7
r7
r6
r5
r4
r3
r2
r1
r0
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
;if you want to displaying the row(2) of the matrix with red LEDs in addition
row(0) with Green LEDs
MOV AL,11111110B ; set initial value (only row(2) is ON) (PORT B so Red led is on)
OUT PPIB,AL
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
DELAY:
MOV CX,0000FH
CONT:
LOOP
RET
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
DELAY:
MOV CX,0FFFFH ;SET DELAY LENGTH
CONT: LOOP CONT
RET
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
L1: MOV BL,00000001B ; FOR COLUMNS (initial value)
MOV SI , OFFSET ARRAY
L2:
MOV AL,BL
OUT PPIC, AL ;Set Port C (columns)
ROL BL ,1 ;So next column will be ON
DELAY:
MOV CX,100H
CONT: LOOP CONT
RET
;To display letter ‘A’ (depending on the drawing below)
ARRAY
DB 11111111B,
11000000B,
10110111B ,
01110111B,
01110111B,
10110111B,
11000000B,
11111111B,
00H ;JUST TO COMPER
CODE ENDS
END
Note: If we want to display any letter or shape then only the array will be different, all other
codes in the program will still the same as above.
- Level meter of 10 LEDs
- LEDs are on when we give HEX value equal or more than
their threshold value according to this table:
LED HEX values
1 00-05H
2 05-10H
3 10-15H
4 15-20H
5 20-25H
6 25-30H
7 30-35H
8 35-40H
9 40-45H
10 45-50H
DELAY:
MOV CX,00FFFH ;SET DELAY LENGTH
CONT:
LOOP CONT
CODE ENDS
END
Note:
When we use CMP AL,50H means When we use fewer value than 50H like 20H or 10H
we will reach top of level meter: then we will reach half or less the level meter:
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
MOV AL,10000000B
OUT PPIC_C,AL
L2:
OUT PPIC ,AL
CALL DELAY
DEC AL
CMP AL ,00H
JZ L1
JMP L2
DELAY:
MOV CX,00FFFH ;SET DELAY LENGTH
CONT:
LOOP CONT
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
;
SPK EQU 17H
PER EQU 0CH ;OR 0E طول الفترة لضهور كل صوت (كل تردد)وهية ثابتة لكل تردد نفس المدة
;
ORG 1000H
INC DH
JZ L1 ;just to check اذا خلصت وصلت لالخير ارجع عيد من البداية واخذ او تردد ;
DEC DH ;after check ورة ماجيكت خلص ارجع للعنصر االصلي ;
;
;
MOV AL ,0FFH هذا الرقم يتكرر بمقدار كل تردد موجود وعلى مدى المدة المعرفها فوك ;
L3:
;;AND CX ,00FFH هنا سوينة دلي بقدر قيمة كل عنصر يعني دلي متغير حسب قيمة التردد واكدر الغيها همين مالها داعي ;
اكتفي بالخطوة الي قبلها
LOOP $ هنا ميحتاج اكلة روحلي لفالن مكان ونقص السي اكس هوة راح يشوف وين السي اكس وينقصها ;
XOR AL, 01H هنا راح تضل تتغير بين قيمتين كل شوي حتة الصوت يصعد وينزل اكدر همين ماستخدمها اطلع صوت ثابت;
DEC DL لحد ماتخلص المدة الزمنية مال كل تردد من تخلص امشي على العنصر الثاني بالمصفوفة ;
JNZ L3
INC SI من يخلص البريود المدة الزمنية مال هذا التردد امشي علة الثاني وارجع عيد;
JMP L2
;
FREQ: ;Each number has special sound
DB 25H
DB 27H
DB 29H
DB 2CH
DB 2EH
DB 31H
DB 34H
DB 37H
DB 3BH
DB 3EH
DB 42H
DB 46H
DB 4AH
DB 4FH
DB 54H
DB 59H
DB 5EH
DB 64H
DB 6AH
DB 70H
DB 77H
DB 7EH
DB 85H
DB 0FFH
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
CALL DELAY
INC AL
CMP AL,50H
JZ L3
JMP L2
DELAY:
MOV CX,00FFFH
CONT:
LOOP CONT
INC DH
JZ L1 ; اذا خلصت المصفوفة يعني خلص الصوت ارجعلي للخزان ابدة من الصفر
DEC DH ;اذا ال كمل ارجع للعنصر االصلي الن بعدة مواصل لالخير
;
MOV DL , PER لمدة الزمنية لكل تردد وهية متساوية;
;
L5:
MOV CL,DH قيمة التردد الحالي حولناهة لل سي ال حتة نسوي دلي بمقدارالتردد;
هنا كأنما لوب طولة نفس طول قيمة التردد مثل الموجات التردد يصيرموجة متغيرة صاعدة ونازلة مو خط ثابت ;
DEC DL
JNZ L5
INC SI
JMP L4 ارجع امشي على التردد التالي ماطول خلصت الفترة الزمنية مال التردد الحالي;;
;
FREQ:
DB 25H
DB 37H
DB 49H
DB 5CH
DB 6EH
DB 0FFH
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
PPIA EQU 19H
PPIB EQU 1BH
PPIC EQU 1DH
PPIC_C EQU 1FH
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
;;;;;;;;;;;
L1: MOV AL,00H
MOV SI , OFFSET DATA
L2:
OUT PPIC,AL
MOV BL ,AL ;حتة اخزنها ارجعلها مرة لخ وية كل لوب
MOV AL ,[SI]
OUT PPIA,AL
INC SI
CALL DELAY
MOV AL ,BL ; رجعنة قيمة الخزان الي ضميناهة
ADD AL,05H
CMP AL,55H
JZ L1
JMP L2
DELAY:
MOV CX,0
CONT: LOOP CONT
RET
DATA:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 00H
CODE ENDS
END